
책 혼자 공부하는 머신러닝+딥러닝 정리
데이터에서 규칙을 학습하는 알고리즘을 연구

from sklearn.model_selection import train_test_split
train_input, test_input, train_target, test_target = train_test_split(
fish_data, fish_target, random_state=42)

from sklearn.model_selection import train_test_split
train_input, test_input, train_target, test_target = train_test_split(
fish_data, fish_target, stratify=fish_target, random_state=42) # stratify 매개변수는 데이터 클래스 비율에 맞게 데이터를 나눠줌

from sklearn.preprocessing import StandardScaler
""" 특성의 스케일 정규화 """
ss = StandardScaler()
ss.fit(train_poly)
train_scaled = ss.transform(train_poly)
test_scaled = ss.transform(test_poly)
회귀: 두 변수 사이의 상관관계를 분석하는 방법
생선의 특성값을 사용해서 어떤 생선인지 예측하고 싶어요.

from sklearn.neighbors import KNeighborsRegressor
""" k-최근접 이웃 회귀 모델 훈련 """
knr = KNeighborsRegressor()
knr.fit(train_input, train_target)
knr.score(test_input, test_target) # 0.992809406101064
생선의 특성값을 사용하여 무게를 예측하고 싶어요.

from sklearn.linear_model import LinearRegression
""" 다항회귀 """
lr = LinearRegression()
train_poly = np.column_stack((train_input ** 2, train_input))
test_poly = np.column_stack((test_input ** 2, test_input))
lr.fit(train_poly, train_target)
print(lr.predict([[50**2, 50]]))
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
""" 변환기를 통한 특성 공학 """
poly = PolynomialFeatures(degree=5, include_bias=False) # 5제곱까지 특성을 만듬
poly.fit(train_input)
train_poly = poly.transform(train_input)
""" 다중 회귀 모델 학습 """
lr = LinearRegression()
lr.fit(train_poly, train_target)
print(lr.score(train_poly, train_target)) # 0.9999999999996433
print(lr.score(train_poly, train_target)) # -144.40579436844948, 과대적합
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import Ridge, Lasso
from sklearn.linear_model import Ridge
""" 특성의 스케일 정규화 """
ss = StandardScaler()
ss.fit(train_poly)
train_scaled = ss.transform(train_poly)
test_scaled = ss.transform(test_poly)
""" 릿지 회귀 """
ridge = Ridge()
ridge.fit(train_scaled, train_target)
print(ridge.score(train_scaled, train_target)) # 0.9896101671037343
print(ridge.score(test_scaled, test_target)) # 0.9790693977615387
""" 라쏘 회귀 """
lasso = Lasso()
lasso.fit(train_scaled, train_target)
print(lasso.score(train_scaled, train_target)) # 0.989789897208096
print(lasso.score(test_scaled, test_target)) # 0.9800593698421883
럭키백에 담긴 생선이 어떤 생선인지 확률을 예측해주세요.

from sklearn.linear_model import LogisticRegression
lr = LogisticRegression(C=20, max_iter=1000)
lr.fit(train_scaled, train_target)
print(lr.score(train_scaled, train_target))
print(lr.score(test_scaled, test_target))
print(lr.predict(test_scaled[:5]))
proba = lr.predict_proba(test_scaled[:5])
print(np.round(proba, decimals=3))
실시간으로 수집되는 생선 데이터를 학습하고 싶어요.

from sklearn.linear_model import SGDClassifier
sc = SGDClassifier(loss='log_loss', max_iter=10, random_state=42)
sc.fit(train_scaled, train_target)
print(sc.score(train_scaled, train_target))
print(sc.score(test_scaled, test_target))
sc.partial_fit(train_scaled, train_target) # epoch 한번 더 수행
print(sc.score(train_scaled, train_target))
print(sc.score(test_scaled, test_target))
이해하기 쉬운 높은 결정 트리를 사용해 레드, 화이트 와인을 분류

from sklearn.tree import DecisionTreeClassifier
dt = DecisionTreeClassifier(random_state=42)
dt.fit(train_scaled, train_target)
print(dt.score(train_scaled, train_target))
print(dt.score(test_scaled, test_target))

from sklearn.model_selection import cross_validate
splitter = StratifiedKFold(n_splits=10, shuffle=True, random_state=42) # 훈련 세트를 섞는 분할기 지정
scores = cross_validate(dt, train_input, train_target, cv=splitter)
print(np.mean(scores['test_score']))

params = {'min_impurity_decrease': np.arange(0.0001, 0.001, 0.0001),
'max_depth': range(5, 20, 1),
'min_samples_split': range(2, 100, 10)
}
gs = GridSearchCV(DecisionTreeClassifier(random_state=42), params, n_jobs=-1)
gs.fit(train_input, train_target)
print(gs.best_params_)
일반적으로 성능이 높은 모델을 사용하고 싶어요.


타겟값이 없는 데이터 학습


T.B.D