반응형
목차
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))
참고 : 혼자공부하는머신러닝딥러닝
반응형
'코딩 > Python' 카테고리의 다른 글
[코딩] 트리 앙상블(랜덤포레스트, 그라디언트부스팅, 엑스트라트리, XG부스트, 라이트GBM) - 혼자 공부하는 머신러닝 딥러닝 (0) | 2023.05.07 |
---|---|
[코딩] 결정트리(f.혼자 공부하는 머신러닝 딥러닝) (0) | 2023.05.06 |
[코딩] Neighbors 도미와 빙어 전처리 후 구분(혼자 공부하는 머신러닝 딥러닝) (0) | 2023.04.30 |
[파이썬] 혼자 공부하는 데이터 분석(06 데이터표현, 07 검증,예측) (0) | 2023.04.30 |
[파이썬] 혼자 공부하는 데이터 분석(03-2 잘못된 데이터 수정하기) (0) | 2023.04.25 |