You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

253 lines
8.1 KiB
Plaintext

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 선형 회귀 (Linear Regression)\n",
"\n",
"선형 회귀는 연속적인 값을 예측하기 위한 회귀 알고리즘입니다. 주로 종속 변수와 독립 변수 간의 선형 관계를 모델링하는 데 사용됩니다.\n",
"\n",
"### 수식\n",
" \\(y = \\beta_0 + \\beta_1x_1 + \\beta_2x_2 + ... + \\beta_nx_n + \\epsilon\\)\n",
" - \\(y\\): 예측값\n",
" - \\(x_1, x_2, ..., x_n\\): 독립 변수들\n",
" - \\(\\beta_0, \\beta_1, ..., \\beta_n\\): 회귀 계수\n",
" - \\(\\epsilon\\): 오차 항\n",
" \n",
"### 목적\n",
"오차 항 ϵ의 제곱합을 최소화하는 회귀 계수를 찾는 것입니다.\n",
"\n",
"### 사용 사례\n",
"주택 가격 예측, 연봉 예측, 판매량 예측 등 연속적인 값을 가지는 대상을 예측할 때 사용됩니다."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Coefficients: [[2.50779446]]\n",
"Intercept: [4.64634325]\n"
]
}
],
"source": [
"from sklearn.linear_model import LinearRegression\n",
"from sklearn.model_selection import train_test_split\n",
"import numpy as np\n",
"\n",
"# 예제 데이터 생성\n",
"X = np.random.rand(100, 1) * 10 # 100개의 랜덤 데이터\n",
"y = 2.5 * X + 5 + np.random.randn(100, 1) * 2 # y = 2.5x + 5 + 잡음\n",
"\n",
"# 데이터 분할\n",
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)\n",
"\n",
"# 선형 회귀 모델 학습\n",
"model = LinearRegression()\n",
"model.fit(X_train, y_train)\n",
"\n",
"# 예측\n",
"y_pred = model.predict(X_test)\n",
"\n",
"print(\"Coefficients:\", model.coef_)\n",
"print(\"Intercept:\", model.intercept_)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# diabetes 데이터셋\n",
"\n",
"### 개요\n",
" - 위스콘신 대학의 유방암 진단 데이터셋으로, 유방암 종양의 임상 정보를 기반으로 악성(malignant) 또는 양성(benign)으로 분류하는 문제에 사용됩니다.\n",
"\n",
"### 특징\n",
" - 30개의 특징 변수가 있으며, 이는 종양의 다양한 특성(크기, 반경, 질감 등)을 나타냅니다.\n",
"\n",
"### 목표 변수\n",
" - 종양이 악성인지(1) 양성인지(0)를 나타내는 이진 값입니다.\n",
"\n",
"### 용도\n",
" - 이 데이터셋은 주로 분류 문제에 사용됩니다.\n",
"\n",
"### 속성\n",
" - age: 나이\n",
" - sex: 성별\n",
" - bmi: 체질량지수\n",
" - bp: 평균 혈압\n",
" - s1 ~ s6: 6개의 혈청 측정값"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Mean Squared Error: 4061.83\n"
]
}
],
"source": [
"import numpy as np\n",
"from sklearn import datasets\n",
"from sklearn.model_selection import train_test_split\n",
"from sklearn.linear_model import LinearRegression\n",
"from sklearn.metrics import mean_squared_error\n",
"\n",
"# 데이터 로드\n",
"diabetes = datasets.load_diabetes()\n",
"X = diabetes.data[:, np.newaxis, 2] # BMI feature만 사용\n",
"y = diabetes.target\n",
"\n",
"# 데이터 분할\n",
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n",
"\n",
"# 선형 회귀 모델 학습\n",
"model = LinearRegression()\n",
"model.fit(X_train, y_train)\n",
"\n",
"# 예측 및 평가\n",
"y_pred = model.predict(X_test)\n",
"mse = mean_squared_error(y_test, y_pred)\n",
"print(f\"Mean Squared Error: {mse:.2f}\")\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 로지스틱 회귀 (Logistic Regression)\n",
"로지스틱 회귀는 이름에 '회귀'가 들어가지만, 분류 문제에 사용되는 알고리즘입니다. 주로 이진 분류 문제에 사용되며, 확률을 출력으로 가집니다.\n",
"\n",
"### 수식\n",
" - \\(P(Y=1) = \\frac{1}{1 + e^{-(\\beta_0 + \\beta_1x_1 + \\beta_2x_2 + ... + \\beta_nx_n)}}\\)\n",
" - \\(P(Y=1)\\): 클래스 1에 속할 확률\n",
" - \\(x_1, x_2, ..., x_n\\): 독립 변수들\n",
" - \\(\\beta_0, \\beta_1, ..., \\beta_n\\): 회귀 계수\n",
"\n",
"### 목적\n",
" - 로그 오즈를 최대화하는 것입니다. 로그 오즈는 실제 값과 예측 확률 간의 로그 비율로 계산됩니다.\n",
"\n",
"### 사용 사례\n",
" - 스팸 메일 분류, 환자의 질병 발병 여부 예측, 고객 이탈 여부 예측 등 이진 분류 문제에 주로 사용됩니다. 다중 클래스 분류에도 확장하여 사용할 수 있습니다."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.linear_model import LogisticRegression\n",
"from sklearn.model_selection import train_test_split\n",
"\n",
"# 예제 데이터 생성\n",
"X = np.random.rand(100, 1) * 10 # 100개의 랜덤 데이터\n",
"y = (X > 5).astype(int).ravel() # X가 5보다 크면 1, 아니면 0\n",
"\n",
"# 데이터 분할\n",
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)\n",
"\n",
"# 로지스틱 회귀 모델 학습\n",
"model = LogisticRegression()\n",
"model.fit(X_train, y_train)\n",
"\n",
"# 예측\n",
"y_pred = model.predict(X_test)\n",
"\n",
"print(\"Coefficients:\", model.coef_)\n",
"print(\"Intercept:\", model.intercept_)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# breast_cancer 데이터셋\n",
"\n",
"### 개요\n",
" - 위스콘신 대학의 유방암 진단 데이터셋으로, 유방암 종양의 임상 정보를 기반으로 악성(malignant) 또는 양성(benign)으로 분류하는 문제에 사용됩니다.\n",
"\n",
"### 특징\n",
" - 30개의 특징 변수가 있으며, 이는 종양의 다양한 특성(크기, 반경, 질감 등)을 나타냅니다.\n",
"\n",
"### 목표 변수\n",
" - 종양이 악성인지(1) 양성인지(0)를 나타내는 이진 값입니다.\n",
"\n",
"### 용도\n",
" - 이 데이터셋은 주로 분류 문제에 사용됩니다."
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Accuracy: 95.61%\n"
]
}
],
"source": [
"from sklearn import datasets\n",
"from sklearn.model_selection import train_test_split\n",
"from sklearn.linear_model import LogisticRegression\n",
"from sklearn.metrics import accuracy_score\n",
"\n",
"# 데이터 로드\n",
"cancer = datasets.load_breast_cancer()\n",
"X = cancer.data\n",
"y = cancer.target\n",
"\n",
"# 데이터 분할\n",
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n",
"\n",
"# 로지스틱 회귀 모델 학습\n",
"model = LogisticRegression(max_iter=10000) # max_iter를 증가시켜 수렴을 도움\n",
"model.fit(X_train, y_train)\n",
"\n",
"# 예측 및 평가\n",
"y_pred = model.predict(X_test)\n",
"acc = accuracy_score(y_test, y_pred)\n",
"print(f\"Accuracy: {acc*100:.2f}%\")\n"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.11"
},
"orig_nbformat": 4
},
"nbformat": 4,
"nbformat_minor": 2
}