개념
샘플 하나에 대한 손실을 정의한다.
확률적 경사 하강법이 최적화할 대상이다.
분류
- 이진 크로스엔트로피 손실 함수(로지스틱 손실 함수) : 2가지의 클래스에 사용된다.
- 크로스엔트로피 손실 함수 : 2가지 이상의 클래스에 사용된다.
문법
from sklearn.linear_model import SGDClassifier # 확률적 경사 하강법 사용
# loss: 사용할 알고리즘, max_iter: 반복 횟수, tol: 반복을 멈출 조건, penalty: 규제(l2:릿지,l1:라쏘)
sc = SGDClassifier(loss='hinge', max_iter=1000,tol=0.001,penalty='l2')
sc.fit(data,target) # 학습
sc.score(data,target) # 모델 평가
sc.partial_fit(data,target) # 추가 학습
실습
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split # 데이터 셋 분류
from sklearn.preprocessing import StandardScaler # 사이킷런 전처리 사용
from sklearn.neighbors import KNeighborsClassifier # K-NN 사용
from sklearn.linear_model import LogisticRegression, SGDClassifier # 로지스틱 회귀 사용, 확률적 경사 하강법 사용
from scipy.special import softmax # softmax 사용
fish = pd.read_csv('https://bit.ly/fish_csv_data')
fish_input = fish.iloc[:,1:].to_numpy()
fish_target = fish['Species'].to_numpy()
# 데이터 셋 나누기
train_input, test_input, train_target, test_target = train_test_split(fish_input, fish_target, random_state=42)
# 전처리
ss = StandardScaler()
ss.fit(train_input)
train_scaled = ss.transform(train_input)
test_scaled = ss.transform(test_input)
# 최적의 반복 횟수 찾기
sc = SGDClassifier(loss='log',random_state=42)
train_score = []
test_score = []
classes = np.unique(train_target)
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))
plt.plot(train_score,label='train')
plt.plot(test_score,label='test')
plt.legend()
plt.show()
'Data science > 머신러닝' 카테고리의 다른 글
PCA(주성분 분석) (3) | 2022.07.23 |
---|---|
K-means clustering(k-평균 알고리즘) (0) | 2022.07.23 |
Gradient Descent(경사 하강법) (0) | 2022.07.17 |
Logistic Regression(로지스틱 회귀) (0) | 2022.07.16 |
regularization(규제) (0) | 2022.07.15 |