본문 바로가기

코딩/Python

[코딩] 이진분류,다중분류(f.혼자공부하는 머신러닝 딥러닝)

반응형

목차

1. 데이터 세팅

  가. train,test 나누기

  나. 정규화

2. k-최근접 훈련

  가. 훈련

  나. 예측

  다. 확률 수치 구하기

3. 이진분류

  가. 로지스틱회귀 훈련

  나. 예측값(샘플5개) 및 확률 값

  다. 계수확인(coef, intercept)

  라. z값 및  확률값

4. 다중분류

  가. 훈련

  나. 예측값(샘플5개) 및 확률값

  다. z값 및 확률값

  라. 소프트맥스 계산

 

 

데이터
import pandas as pd
import numpy as np

fish = pd.read_csv('https://bit.ly/fish_csv_data')

 

train,test 나누기 및 정규화
fish_input = fish[['Weight', 'Length', 'Diagonal', 'Height', 'Width']].to_numpy() #넘파이 배열로 변경
fish_target = fish['Species'].to_numpy()

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)

from sklearn.preprocessing import StandardScaler
ss = StandardScaler()
ss.fit(train_input)
train_scaled = ss.transform(train_input)
test_scaled = ss.transform(test_input)

 

k-최근접으로 분류
from sklearn.neighbors import KNeighborsClassifier
kn = KNeighborsClassifier(n_neighbors = 4)
kn.fit(train_scaled, train_target)
print(kn.score(train_scaled, train_target))
print(kn.score(test_scaled, test_target))

print(kn.predict(test_scaled[:5]))
proba = kn.predict_proba(test_scaled[:5])
print(kn.classes_)
print(np.round(proba, decimals = 4))

distances, indexes = kn.kneighbors(test_scaled[3:4])
print(train_target[indexes]) #n_neighbors = 4에서 참고 index

 

이진분류
#이진분류(도미(Bream)와 빙어(Smelt))
# 회귀 z값 및 확률 구하기(decision_function)
bream_smelt_indexes = (train_target == 'Bream') | (train_target == 'Smelt')
train_bream_smelt = train_scaled[bream_smelt_indexes]
target_bream_smelt = train_target[bream_smelt_indexes]

from sklearn.linear_model import LogisticRegression

lr = LogisticRegression()
lr.fit(train_bream_smelt, target_bream_smelt)
print(lr.classes_)
print(lr.predict(train_bream_smelt[:5]))
print(lr.predict_proba(train_bream_smelt[:5]))
print(lr.coef_, lr.intercept_)

print(lr.decision_function(train_bream_smelt[:5])) #처음 5개의 z값

#z값의 확률
from scipy.special  import expit
decisions = lr.decision_function(train_bream_smelt[:5]))
print(expit(decisions))

 

다중분류
#다중분류(소프트맥스)
lr = LogisticRegression(C=20, max_iter = 1000)
#C는 규제값, 작을수록 규제 커짐, 기본값은 1
#max_iter는 매개변수에서 반복횟수, 기본값은 100
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))
print(lr.coef_, lr.intercept_)
print(lr.classes_)
decision = lr.decision_function(test_scaled[:5])  #z값 구하기
print(np.round(decision, decimals = 2))

from scipy.special import softmax
proba = softmax(decision, axis = 1)  #각 행에 대한 확률값 계산, 지정하지 않으면 배열 전체를 계산함
print(np.round(proba, decimals = 3))

참고 : 혼자공부하는머신러닝딥러닝

반응형