와인 데이터를 통해(도수, 당도 pH 값) 로지스틱 회귀 모델을 적용하여 훈련, 예측해보자.
import pandas as pd wine = pd.read_csv('https://bit.ly/wine_csv_data') wine.head()
도수, 당도, pH이다. 그리고 class는 0이면 레드, 1이면 화이트 와인이다.
로지스틱 회귀 모델을 이용한다면 화이트 와인이 1, 양성클래스이다. 이를 골라내는 문제이다.
wine.info()
non-null count가 6497이니, 누락된 값은 없다.(non-null은 결측지로, 값이 존재하지 않는 데이터이다.)
wine.describe()
데이터프레임의 통계값을 출력한다.
이전 포스트에서의 훈련과정을 단순히 작성한다.
data = wine[['alcohol', 'sugar', 'pH']].to_numpy() target = wine['class'].to_numpy()
from sklearn.model_selection import train_test_split train_input, test_input, train_target, test_target = train_test_split( data, target, test_size=0.2, random_state=42s)
from sklearn.preprocessing import StandardScaler ss = StandardScaler() ss.fit(train_input) train_scaled = ss.transform(train_input) test_scaled = ss.trasnsform(test_input)
from sklearn.Lienar_model import LogisticRegression lr = LogisticRegression() lr.fit(train_scaled, train_target) lr.score(train_scaled, train_target) # 0.7808350971714451 lr.score(test_scaled, test_target) # 0.7776923076923077점수가 높지 않다. 생각보다 화이트 와인을 고르는게 어렵나보다.
print(lr.coef_, lr.intercept_) # [[ 0.51270274 1.6733911 -0.68767781]] [1.81777902]도수 값에 0.51270274를 곱하고, 당도에 1.6733911을 곱하고,... 이런식으로 모델에 대해 설명한다면, 이해하기 힘들다.
아마도 알코올 도수와 당도가 높을수록 화이트 와인일 가능성이 높고, pH가 높을수록 레드와인일 가능성이 높을 것 같지만, 여전히 직관적으로 다가오지 않는다.
이를 설명할 수 있는 방법이 무엇이 있을까?