728x90
Logistic Regression :
분류에 사용한다. (Classification)
예) 나이대별로 이메일을 클릭해서 열지 말지를 분류해 보자.
이렇게 비슷하게 생긴 함수가 이미존재한다. 이름은 sigmoid function
따라서 리니어 리그레션 식을, y 값을 시그모이드에 대입해서, 일차방정식으로 만들면 다음과 같아진다.
위와 같은 식을 가진 regression 을, Logistic Regression이라 한다.
이제 우리는, 이를 가지고 두개의 클래스로 분류할 수 있다. ( 클릭을 한다, 안한다 두개로.)
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
우선 필요한 라이브러리들을 import 해줍니다.
데이터 프레임을 확인한 후,
1. NaN 확인
df.isna().sum()
2. X와 y로 분리
X=df.loc[:,'Age':'EstimatedSalary']
y=df['Purchased']
3. 로지스틱 리그레션은 피처스케일링을 해줘야 한다. / 모델링 과정
from sklearn.preprocessing import MinMaxScaler
scaler_X = MinMaxScaler()
X=scaler_X.fit_transform(X)
#train,Test 용 데이터 만들기
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=3)
#모델링,분류의 문젱이므로 분류의 문제 해결할수 있는 인공지능으로 모델링한다
from sklearn.linear_model import LogisticRegression
classifier = LogisticRegression(random_state=3)
classifier.fit(X_train,y_train)
#성능 평가 테스트한다
y_pred = classifier.predict(X_test)
# 0과 1로 분류하는 문제
# 따라서 y_test 값도 0과 1, y_pred 값도 0과 1
# y_test의 0과 1은 행으로 셋팅하고, y_pred의 0과 1은 열로 셋팅합니다.
cm=confusion_matrix(y_test,y_pred)
from sklearn.metrics import accuracy_score # 정확도를 계산해주는 라이브러리 임포트
accuracy_score(y_test,y_pred)
from sklearn.metrics import classification_report
print(classification_report(y_test,y_pred))
아래는 테스트 데이터로 나온 예측 결과를 나타낸 것입니다.
Confusion Matrix 와 같습니다.
X_set, y_set = X_test, y_test
X1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.01),
np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.01))
plt.figure(figsize=[10,7])
plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape),
alpha = 0.75, cmap = ListedColormap(('red', 'green')))
plt.xlim(X1.min(), X1.max())
plt.ylim(X2.min(), X2.max())
for i, j in enumerate(np.unique(y_set)):
plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1],
c = ListedColormap(('red', 'green'))(i), label = j)
plt.title('Classifier (Test set)')
plt.xlabel('Age')
plt.ylabel('Estimated Salary')
plt.legend()
plt.show()
from matplotlib.colors import ListedColormap
X_set, y_set = X_train, y_train
X1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.01),
np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.01))
plt.figure(figsize=[10,7])
plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape),
alpha = 0.75, cmap = ListedColormap(('red', 'green')))
plt.xlim(X1.min(), X1.max())
plt.ylim(X2.min(), X2.max())
for i, j in enumerate(np.unique(y_set)):
plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1],
c = ListedColormap(('red', 'green'))(i), label = j)
plt.title('Logistic Regression (Training set)')
plt.xlabel('Age')
plt.ylabel('Estimated Salary')
plt.legend()
plt.show()
'인공지능 > 머신러닝' 카테고리의 다른 글
머신 러닝 : KNN알고리즘 (K-Nearest Neighbor) (0) | 2022.12.02 |
---|---|
머신 러닝 : Logistic Regression up sampling기법 imblearn.over_sampling SMOTE (0) | 2022.12.02 |
머신러닝 : Multiple Linear Regression (0) | 2022.12.01 |
머신러닝 : Linear Regression (0) | 2022.12.01 |
머신 러닝 : Training / Test set , 트레이닝 용 / 테스트 용 데이터 나누기 train_test_split() (0) | 2022.12.01 |