군침이 싹 도는 코딩

Logistic Regression 본문

Python/Machine Learning

Logistic Regression

mugoori 2022. 12. 1. 17:47

해당 데이터 프레임으로 구매여부를 예측하는

로지스틱 리그레이션을 만들어보자

로지스틱 리그레이션은 분류예측을 할때 사용되는 인공지능이다.

코딩방식은 리니어 리그레이션과 비슷하므로 다른점만 # 로 후술한다

 

1. nan 을 찾는다

df.isna().sum()
>>> User ID            0
    Gender             0
    Age                0
    EstimatedSalary    0
    Purchased          0
    dtype: int64

 

 

2.카테고리컬 데이터인 Purchased 데이터를 정렬해준다

df['Purchased'].unique()
>>> array([0, 1], dtype=int64)

 

 

3.X,y를 나눈다

X = df.loc[:,'Age':'EstimatedSalary']
y = df['Purchased']

 

 

4. 피쳐 스케일링을 한다

from sklearn.preprocessing import MinMaxScaler
scaler_X = MinMaxScaler()
X = scaler_X.fit_transform(X)

# 리니어 리그레이션과 다르게 로지스틱 리그레이션은 피쳐 스케일링을 해주지 않으므로

따로 해야 한다 y는 이미 0과 1이므로 따로 피쳐 스케일링 할 필요가없다

 

 

5. 트레이닝과 테스트셋으로 나눈다

from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.25,random_state=1)

 

 

6.모델링 및 학습을 시킨다

from sklearn.linear_model import LogisticRegression

classifier = LogisticRegression(random_state=1)
classifier.fit(X_train, y_train)

LogisticRegression 에 import 한다
LogisticRegression 을 변수 classifier 저장
fit 함수를 사용해 학습시킨다

# 인공지능 관련 학습하라는 함수 fit은 전부 통일이므로 fit을 사용하면 된다

 

 

7. 테스트를 해본다

classifier.predict(X_test)
>>> array([0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1,
           1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0,
           1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1,
           0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
           0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0], dtype=int64)

# 인공지능 관련 예측하라는 함수는 전부 predict로 통일되어있으므로 predict를 사용하면 된다

로지스틱 인공지능은 분류 예측을 하는 인공지능이므로 사용된 데이터프레임의 구매여부를 판단하는거기때문에

출력값이 0과 1로 나왔다

 

 

# 번외로 0과 1이 어떤식으로 출력되었는지를 알고싶다면 predict_proba 를 사용한다

classifier.predict_proba(X_test)
       
       #        0           1
>>> array([[0.86288917, 0.13711083],
           [0.70574277, 0.29425723],
           [0.49025346, 0.50974654],
           [0.38383672, 0.61616328],
           [0.75287835, 0.24712165],
           [0.71129842, 0.28870158],
           [0.97386557, 0.02613443],

# 수치가 더 높은쪽으로 결과값이 출력되는데 왼쪽이 0 오른쪽이 1이다

따라서 첫번째 값은 0 두번째 0 세번째는 1로 나온것이다

 

 

8. 검증

로지스틱 리그레이션은 리니어 리그레이션과 다른방법으로 검증한다

로지스틱 리그레이션은 confusion_matrix 라는것을 사용한다

from sklearn.metrics import confusion_matrix,accuracy_score,classification_report
cm = confusion_matrix(y_test,y_pred)
cm
>>> array([[52,  6],
           [14, 28]], dtype=int64)
           
accuracy_score(y_test,y_pred)
>>> 0.8

# cm 이라고 저장한 컨퓨전 매트릭스의 행 부분은 y_test (실제값) 열 부분은 y_pred(예측값) 을 넣어준것이다

1행 1열은 실제값도 0 예측값도 0 이 52개라는 뜻이고

2행 2열은 실제값이 1 예측값도 1 이 28개 있다는 뜻이다

이 두개를 더한 값을 전체값으로 나눈것이 이 인공지능의 정확도인데

이것을 구해주는것이 accuracy_score 이다