본문 바로가기

Data science/머신러닝

Loss function(손실 함수)

개념

샘플 하나에 대한 손실을 정의한다.

확률적 경사 하강법이 최적화할 대상이다.

 

분류

  • 이진 크로스엔트로피 손실 함수(로지스틱 손실 함수) : 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