#!/usr/bin/env python # coding: utf-8 # # 확률적 경사 하강법 # # #
# 구글 코랩에서 실행하기 #
# ## SGDClassifier # In[1]: import pandas as pd fish = pd.read_csv('https://bit.ly/fish_csv_data') # In[2]: fish_input = fish[['Weight','Length','Diagonal','Height','Width']].to_numpy() fish_target = fish['Species'].to_numpy() # In[3]: from sklearn.model_selection import train_test_split train_input, test_input, train_target, test_target = train_test_split( fish_input, fish_target, random_state=42) # In[4]: from sklearn.preprocessing import StandardScaler ss = StandardScaler() ss.fit(train_input) train_scaled = ss.transform(train_input) test_scaled = ss.transform(test_input) # In[5]: from sklearn.linear_model import SGDClassifier # In[6]: 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)) # In[7]: sc.partial_fit(train_scaled, train_target) print(sc.score(train_scaled, train_target)) print(sc.score(test_scaled, test_target)) # ## 에포크와 과대/과소적합 # In[8]: import numpy as np sc = SGDClassifier(loss='log_loss', random_state=42) train_score = [] test_score = [] classes = np.unique(train_target) # In[9]: for _ in range(0, 300): sc.partial_fit(train_scaled, train_target, classes=classes) train_score.append(sc.score(train_scaled, train_target)) test_score.append(sc.score(test_scaled, test_target)) # In[10]: import matplotlib.pyplot as plt plt.plot(train_score) plt.plot(test_score) plt.xlabel('epoch') plt.ylabel('accuracy') plt.show() # In[11]: sc = SGDClassifier(loss='log_loss', max_iter=100, tol=None, random_state=42) sc.fit(train_scaled, train_target) print(sc.score(train_scaled, train_target)) print(sc.score(test_scaled, test_target)) # In[12]: sc = SGDClassifier(loss='hinge', max_iter=100, tol=None, random_state=42) sc.fit(train_scaled, train_target) print(sc.score(train_scaled, train_target)) print(sc.score(test_scaled, test_target))