๋จธ์ ๋ฌ๋์ ์ํ ํ์ด์ฌ part 2
๋ค์ด๊ฐ๋ฉฐ
์ฒซ ๋ฒ์งธ ์ฌ์ ์์ ํ์ด์ฌ ๋จธ์ ๋ฌ๋ ์ํ๊ณ์ ๊ธฐ์ด๋ฅผ ๋ค์ก๋ค๋ฉด, ์ด๋ฒ์๋ ์ค์ ์์ธก๊ณผ ๋ถ๋ฅ ๋ชจ๋ธ์ ๋ง๋ค์ด๋ณด๋ ์๊ฐ์ ๋๋ค. ์ ํ ํ๊ท๋ถํฐ ๋ก์ง์คํฑ ํ๊ท๊น์ง, ๋ฐ์ดํฐ๋ก๋ถํฐ ํจํด์ ์ฐพ์ ๋ฏธ๋๋ฅผ ์์ธกํ๋ ๋ง๋ฒ์ ๋ฐฐ์๋ณด๊ฒ ์ต๋๋ค!
1. ์ ํ ํ๊ท: ์์ธก์ ์์
1.1 ์ ํ ํ๊ท์ ๊ฐ๋
์ ํ ํ๊ท๋ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ด๋ฉด์๋ ๊ฐ๋ ฅํ ์์ธก ๋ชจ๋ธ์ด๋ค. ๋ ๋ฆฝ๋ณ์์ ์ข ์๋ณ์ ๊ฐ์ ์ ํ ๊ด๊ณ๋ฅผ ์ฐพ์ ๋ฏธ๋ ๊ฐ์ ์์ธกํ๋ค.
import numpy as np import pandas as pd from sklearn.linear_model import LinearRegression from sklearn.model_selection import train_test_split from sklearn.metrics import mean_squared_error, r2_score # ๋ฐ์ดํฐ ์ค๋น X = np.random.rand(100, 1) * 10 y = 2 * X + 1 + np.random.randn(100, 1) * 0.5 # ๋ชจ๋ธ ํ์ต model = LinearRegression() model.fit(X, y) # ์์ธก y_pred = model.predict(X) print(f"๊ณ์: {model.coef_[0][0]:.2f}") print(f"์ ํธ: {model.intercept_[0]:.2f}")
1.2 ๋ค์ค ์ ํ ํ๊ท
์ค์ ๋ฌธ์ ์์๋ ์ฌ๋ฌ ๋ณ์๊ฐ ๋ณตํฉ์ ์ผ๋ก ์์ฉํ๋ค. ๋ค์ค ์ ํ ํ๊ท๋ก ๋ณต์กํ ํจํด์ ์ฐพ์๋ณด์.
# ๋ค์ค ๋ณ์ ๋ฐ์ดํฐ X_multi = np.random.rand(100, 3) * 10 y_multi = 2*X_multi[:, 0] + 1.5*X_multi[:, 1] - 0.5*X_multi[:, 2] + np.random.randn(100) * 0.5 # ๋ค์ค ์ ํ ํ๊ท model_multi = LinearRegression() model_multi.fit(X_multi, y_multi) # ๋ณ์ ์ค์๋ ํ์ธ for i, coef in enumerate(model_multi.coef_): print(f"๋ณ์ {i+1} ๊ณ์: {coef:.2f}")
2. ๋ก์ง์คํฑ ํ๊ท: ๋ถ๋ฅ์ ๊ธฐ์ด
2.1 ์ด์ง ๋ถ๋ฅ
๋ก์ง์คํฑ ํ๊ท๋ ์ฐ์์ ์ธ ํ๋ฅ ์ ์ด์ง ๋ถ๋ฅ๋ก ๋ณํํ๋ ๊ฐ๋ ฅํ ๋๊ตฌ๋ค.
from sklearn.linear_model import LogisticRegression from sklearn.metrics import classification_report, confusion_matrix # ์ด์ง ๋ถ๋ฅ ๋ฐ์ดํฐ ์์ฑ X_binary = np.random.randn(200, 2) y_binary = (X_binary[:, 0] + X_binary[:, 1] > 0).astype(int) # ๋ก์ง์คํฑ ํ๊ท ๋ชจ๋ธ logistic_model = LogisticRegression() logistic_model.fit(X_binary, y_binary) # ์์ธก ๋ฐ ํ๊ฐ y_pred_binary = logistic_model.predict(X_binary) print(classification_report(y_binary, y_pred_binary))
2.2 ๋ค์ค ๋ถ๋ฅ
์ธ ๊ฐ ์ด์์ ํด๋์ค๋ฅผ ๋ถ๋ฅํ ๋๋ ๋ค์ค ํด๋์ค ๋ก์ง์คํฑ ํ๊ท๋ฅผ ์ฌ์ฉํ๋ค.
from sklearn.datasets import make_classification from sklearn.multiclass import OneVsRestClassifier # ๋ค์ค ํด๋์ค ๋ฐ์ดํฐ X_multi_class, y_multi_class = make_classification( n_samples=300, n_features=4, n_classes=3, n_clusters_per_class=1 ) # ๋ค์ค ํด๋์ค ๋ก์ง์คํฑ ํ๊ท multi_logistic = LogisticRegression(multi_class='ovr') multi_logistic.fit(X_multi_class, y_multi_class) # ์์ธก y_pred_multi = multi_logistic.predict(X_multi_class) print(classification_report(y_multi_class, y_pred_multi))
3. ๋ชจ๋ธ ํ๊ฐ์ ๊ฒ์ฆ
3.1 ๊ต์ฐจ ๊ฒ์ฆ
๊ณผ์ ํฉ์ ๋ฐฉ์งํ๊ณ ๋ชจ๋ธ์ ์ผ๋ฐํ ์ฑ๋ฅ์ ํ๊ฐํ๋ ๊ต์ฐจ ๊ฒ์ฆ์ ์ค์ตํด๋ณด์.
from sklearn.model_selection import cross_val_score, KFold # K-Fold ๊ต์ฐจ ๊ฒ์ฆ kfold = KFold(n_splits=5, shuffle=True, random_state=42) scores = cross_val_score(logistic_model, X_binary, y_binary, cv=kfold) print(f"๊ต์ฐจ ๊ฒ์ฆ ์ ์: {scores.mean():.3f} (+/- {scores.std() * 2:.3f})")
3.2 ํ์ดํผํ๋ผ๋ฏธํฐ ํ๋
GridSearchCV๋ฅผ ์ฌ์ฉํด ์ต์ ์ ํ์ดํผํ๋ผ๋ฏธํฐ๋ฅผ ์ฐพ์๋ณด์.
from sklearn.model_selection import GridSearchCV # ํ์ดํผํ๋ผ๋ฏธํฐ ๊ทธ๋ฆฌ๋ param_grid = { 'C': [0.1, 1, 10, 100], 'penalty': ['l1', 'l2'], 'solver': ['liblinear', 'saga'] } # ๊ทธ๋ฆฌ๋ ์์น grid_search = GridSearchCV( LogisticRegression(), param_grid, cv=5, scoring='accuracy' ) grid_search.fit(X_binary, y_binary) print(f"์ต์ ํ๋ผ๋ฏธํฐ: {grid_search.best_params_}") print(f"์ต๊ณ ์ ์: {grid_search.best_score_:.3f}")
4. ์ค์ ํ๋ก์ ํธ: ์ฃผํ ๊ฐ๊ฒฉ ์์ธก
4.1 ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ
์ค์ ๋ฐ์ดํฐ๋ก ์ฃผํ ๊ฐ๊ฒฉ์ ์์ธกํ๋ ํ๋ก์ ํธ๋ฅผ ์งํํด๋ณด์.
import pandas as pd from sklearn.preprocessing import StandardScaler from sklearn.ensemble import RandomForestRegressor # ์ฃผํ ๊ฐ๊ฒฉ ๋ฐ์ดํฐ (์์) data = pd.DataFrame({ 'area': np.random.rand(1000) * 200 + 50, 'bedrooms': np.random.randint(1, 6, 1000), 'bathrooms': np.random.randint(1, 4, 1000), 'age': np.random.randint(0, 50, 1000) }) # ๊ฐ๊ฒฉ ์์ฑ (์ค์ ๋ก๋ ๋ ๋ณต์กํ ๊ด๊ณ) data['price'] = ( data['area'] * 100 + data['bedrooms'] * 50000 + data['bathrooms'] * 30000 - data['age'] * 2000 + np.random.randn(1000) * 10000 ) # ํน์ฑ๊ณผ ํ๊ฒ ๋ถ๋ฆฌ X_house = data[['area', 'bedrooms', 'bathrooms', 'age']] y_house = data['price'] # ๋ฐ์ดํฐ ๋ถํ X_train, X_test, y_train, y_test = train_test_split( X_house, y_house, test_size=0.2, random_state=42 ) # ์ค์ผ์ผ๋ง scaler = StandardScaler() X_train_scaled = scaler.fit_transform(X_train) X_test_scaled = scaler.transform(X_test) # ๋๋ค ํฌ๋ ์คํธ ๋ชจ๋ธ rf_model = RandomForestRegressor(n_estimators=100, random_state=42) rf_model.fit(X_train_scaled, y_train) # ์์ธก ๋ฐ ํ๊ฐ y_pred_house = rf_model.predict(X_test_scaled) mse = mean_squared_error(y_test, y_pred_house) r2 = r2_score(y_test, y_pred_house) print(f"ํ๊ท ์ ๊ณฑ ์ค์ฐจ: {mse:.2f}") print(f"Rยฒ ์ ์: {r2:.3f}")
5. ํ์ตํ๋ฉด์ ๋๋ ์
5.1 ๋ฐ์ดํฐ์ ์ค์์ฑ
- ์ข์ ๋ชจ๋ธ๋ณด๋ค ์ข์ ๋ฐ์ดํฐ๊ฐ ๋ ์ค์ํ๋ค - ์ ์ฒ๋ฆฌ๊ฐ ๋ชจ๋ธ ์ฑ๋ฅ์ 80%๋ฅผ ๊ฒฐ์ ํ๋ค
5.2 ๋ชจ๋ธ ํด์์ ์ค์์ฑ
- ๋ธ๋๋ฐ์ค ๋ชจ๋ธ๋ณด๋ค ํด์ ๊ฐ๋ฅํ ๋ชจ๋ธ์ด ์ค๋ฌด์์ ์ ์ฉํ๋ค - ๊ณ์์ ํน์ฑ ์ค์๋๋ฅผ ํตํด ์ธ์ฌ์ดํธ๋ฅผ ์ป์ ์ ์๋ค
6. ์์ผ๋ก์ ๊ณํ
1. ์์๋ธ ๊ธฐ๋ฒ ํ์ต (Random Forest, XGBoost) 2. ๋ฅ๋ฌ๋ ๊ธฐ์ด ๋ค์ง๊ธฐ (Neural Networks) 3. ์์ฐ์ด ์ฒ๋ฆฌ ์ ๋ฌธ (NLP) 4. ์ปดํจํฐ ๋น์ ๊ธฐ์ด (Computer Vision)