학습범위
[2유형] 데이터 분석 : 지도학습 - 분류 학습 (교재 112p ~ 153p)
[2유형] 데이터 분석 : 지도학습 - 회귀 학습 (교재 154p ~ 177p)
과제
- 2주차 학습 내용 업로드
- 모의고사 1회 문제의 제2유형 문제 풀이 (교재 223p)
https://github.com/hscrown/bigdata/blob/main/%EB%AA%A8%EC%9D%98%EA%B3%A0%EC%82%AC1%ED%9A%8C_2%EC%9C%A0%ED%98%95_KNN.ipynb- 모의고사 2회 문제의 제2유형 문제 풀이 (교재 237p)
https://github.com/hscrown/bigdata/blob/main/%EB%AA%A8%EC%9D%98%EA%B3%A0%EC%82%AC_2%ED%9A%8C_2%EC%9C%A0%ED%98%95.ipynb
이번 스터디 분량은 지도 학습 (분류와 회귀) 이다.

지도 학습은 분류와 회귀(예측)으로 나뉩니다.
# 필요 패키지 임포트
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder
from sklearn.metrics import accuracy_score
import pandas as pd
# 데이터 로드
df = pd.read_csv("titanic.csv")
# 결측값 처리
df["Age"].fillna(df["Age"].mean(), inplace=True)
df["Embarked"].fillna(df["Embarked"].mode()[0], inplace=True)
# 레이블 인코딩
df["Sex"] = LabelEncoder().fit_transform(df["Sex"])
df["Embarked"] = LabelEncoder().fit_transform(df["Embarked"])
# 파생 변수 생성
df["FamilySize"] = df["SibSp"] + df["Parch"]
# 데이터셋 준비
X = df[["Pclass", "Sex", "Age", "Embarked", "Fare", "FamilySize"]]
y = df["Survived"]
# 데이터셋 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=11)
# 모델 생성 및 학습
dt = DecisionTreeClassifier(random_state=11)
dt.fit(X_train, y_train)
# 예측 및 정확도 측정
pred = dt.predict(X_test)
acc = accuracy_score(y_test, pred)
print(f"Accuracy: {acc}")
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
import pandas as pd
# 데이터 로드
df = pd.read_csv("iris.csv")
# 데이터 정규화
scaler = MinMaxScaler()
df[["sepal_length", "sepal_width", "petal_length", "petal_width"]] = scaler.fit_transform(
df[["sepal_length", "sepal_width", "petal_length", "petal_width"]])
# 데이터셋 준비
X = df[["sepal_length", "sepal_width", "petal_length", "petal_width"]]
y = df["species"]
# 데이터셋 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=11)
# KNN 모델 생성 및 학습
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)
# 예측 및 정확도 측정
pred = knn.predict(X_test)
acc = accuracy_score(y_test, pred)
print(f"K=3 Accuracy: {acc}")
from sklearn import svm
from sklearn.model_selection import train_test_split
import pandas as pd
# 데이터 로드 및 전처리
df = pd.read_csv("titanic.csv")
df["Age"].fillna(df["Age"].mean(), inplace=True)
df["Embarked"].fillna(df["Embarked"].mode()[0], inplace=True)
# 레이블 인코딩
df = pd.get_dummies(df, columns=["Sex", "Embarked"])
# 데이터셋 준비
X = df[["Pclass", "Age", "Fare", "FamilySize", "Sex_female", "Sex_male", "Embarked_C", "Embarked_Q", "Embarked_S"]]
y = df["Survived"]
# 데이터셋 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# SVM 모델 생성 및 학습
sv = svm.SVC(kernel="rbf", C=1, gamma=0.1)
sv.fit(X_train, y_train)
# 예측 및 평가
pred = sv.predict(X_test)
acc = accuracy_score(y_test, pred)
print(f"Accuracy: {acc}")
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import r2_score
import pandas as pd
# 데이터 로드
df = pd.read_csv("mpg.csv")
df.dropna(inplace=True)
# 데이터셋 준비
X = df[["weight"]]
y = df["mpg"]
# 데이터셋 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 선형 회귀 모델 생성 및 학습
lr = LinearRegression()
lr.fit(X_train, y_train)
# 예측 및 평가
pred = lr.predict(X_test)
score = r2_score(y_test, pred)
print(f"R^2 Score: {score}")
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import r2_score
import pandas as pd
# 데이터 로드
df = pd.read_csv("housing.csv")
df.dropna(inplace=True)
# 데이터셋 준비
X = df.drop("median_house_value", axis=1)
y = df["median_house_value"]
# 데이터셋 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 선형 회귀 모델 생성 및 학습
lr = LinearRegression()
lr.fit(X_train, y_train)
# 예측 및 평가
pred = lr.predict(X_test)
score = r2_score(y_test, pred)
print(f"R^2 Score: {score}")
from sklearn.tree import DecisionTreeRegressor
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
import pandas as pd
# 데이터 로드 및 전처리
df = pd.read_csv("housing.csv")
df.dropna(inplace=True)
df = df.drop("ocean_proximity", axis=1) # 범주형 변수 제거
# 데이터셋 준비
X = df.drop("median_house_value", axis=1)
y = df["median_house_value"]
# 데이터셋 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 의사결정 나무 (회귀) 모델 생성 및 학습
dtr = DecisionTreeRegressor(max_depth=3, random_state=42)
dtr.fit(X_train, y_train)
# 예측 및 평가
pred = dtr.predict(X_test)
mse = mean_squared_error(y_test, pred)
print(f"Mean Squared Error: {mse}")
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
import pandas as pd
# 데이터 로드 및 전처리
df = pd.read_csv("housing.csv")
df.dropna(inplace=True)
df = df.drop("ocean_proximity", axis=1) # 범주형 변수 제거
# 데이터셋 준비
X = df.drop("median_house_value", axis=1)
y = df["median_house_value"]
# 데이터셋 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 랜덤 포레스트 모델 생성 및 학습
rfr = RandomForestRegressor(n_estimators=100, max_depth=3, random_state=42)
rfr.fit(X_train, y_train)
# 예측 및 평가
train_pred = rfr.predict(X_train)
test_pred = rfr.predict(X_test)
train_mse = mean_squared_error(y_train, train_pred)
test_mse = mean_squared_error(y_test, test_pred)
print(f"Train MSE: {train_mse}")
print(f"Test MSE: {test_mse}")
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
from sklearn.metrics import accuracy_score
import pandas as pd
# 데이터 로드
df = pd.read_csv("iris.csv")
# 데이터 정규화
scaler = MinMaxScaler()
df[["sepal_length", "sepal_width", "petal_length", "petal_width"]] = scaler.fit_transform(
df[["sepal_length", "sepal_width", "petal_length", "petal_width"]])
# 데이터셋 준비
X = df[["sepal_length", "sepal_width", "petal_length", "petal_width"]]
y = df["species"]
# 데이터셋 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=11)
# 로지스틱 회귀 모델 생성 및 학습
lr = LogisticRegression()
lr.fit(X_train, y_train)
# 예측 및 평가
pred = lr.predict(X_test)
acc = accuracy_score(y_test, pred)
print(f"Accuracy: {acc}")
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder
from sklearn.metrics import accuracy_score
import pandas as pd
# 데이터 로드 및 전처리
df = pd.read_csv("titanic.csv")
df["Age"].fillna(df["Age"].mean(), inplace=True)
df["Embarked"].fillna(df["Embarked"].mode()[0], inplace=True)
# 레이블 인코딩
df["Sex"] = LabelEncoder().fit_transform(df["Sex"])
df["Embarked"] = LabelEncoder().fit_transform(df["Embarked"])
# 파생 변수 생성
df["FamilySize"] = df["SibSp"] + df["Parch"]
# 데이터셋 준비
X = df[["Pclass", "Sex", "Age", "Embarked", "Fare", "FamilySize"]]
y = df["Survived"]
# 데이터셋 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=11)
# 랜덤 포레스트 모델 생성 및 학습
rf = RandomForestClassifier(n_estimators=50, max_depth=3, random_state=42)
rf.fit(X_train, y_train)
# 예측 및 평가
pred = rf.predict(X_test)
acc = accuracy_score(y_test, pred)
print(f"Accuracy: {acc}")