반응형
1. 로지스틱 회귀 Logistic Regression
- 선형 모델을 분류에 사용해 데이터가 특정 클래스에 속할 확률을 추정하는데 사용할 수 있다.
- 로지스틱 회귀는 선형 회귀 모델처럼 독립변수의 가중치 합으로 계산하지만 특정 범주에 속하는 확률을 나타내기 위해 새로운 접근이 필요하다.
- 회귀 분석의 결과값이 0과 1사이의 값이 되도록 하는 시그모이드 함수를 사용한다.
- 두 클래스에 대해 승산비(odds)에 로그를 취하고, 이를 확률변수로 정리하면 시그모이드 함수를 도출할 수 있다.
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
cancer = load_breast_cancer()
x = pd.DataFrame(cancer.data, columns = cancer.feature_names)
y = cancer.target
X_train, X_test, y_train, y_test = train_test_split(x, y, stratify=y, train_size = 0.7, random_state = 42)
logR = LogisticRegression()
logR.fit(X_train, y_train)
proba = pd.DataFrame(logR.predict_proba(X_train)) # 확률값
cs = logR.decision_function(X_train) # Confidence Score
df = pd.concat([proba, pd.DataFrame(cs)], axis = 1)
df.columns = ['Not 0', '0', 'decision_function']
df.sort_values(['decision_function'], inplace = True)
df.reset_index(inplace =True, drop = True)
df
plt.figure(figsize = (20, 12))
plt.axhline(y=0.5, linestyle='--', color='black', linewidth=1)
plt.axvline(x=0, linestyle='--', color='black', linewidth=1)
plt.plot(df['decision_function'], df['Not 0'], 'g--', label = 'Not 0')
plt.plot(df['decision_function'], df['Not 0'], 'g^')
plt.plot(df['decision_function'], df['0'], 'b--', label='0')
plt.plot(df['decision_function'], df['0'], 'b*')
plt.legend(loc = 'upper left', fontsize = 50)
plt.show()
from sklearn.metrics import confusion_matrix, accuracy_score
from sklearn.metrics import precision_score, recall_score, f1_score
pred = logR.predict(X_test)
test_cm = confusion_matrix(y_test, pred)
test_acc = accuracy_score(y_test, pred)
test_pre = precision_score(y_test, pred)
test_re = recall_score(y_test, pred)
test_f1 = f1_score(y_test, pred)
print(test_cm)
print('\n')
print(f'정확도 : {round(test_acc*100, 2)}%')
print(f'정밀도 : {round(test_pre*100, 2)}%')
print(f'재현율 : {round(test_re*100, 2)}%')
print(f'F1 score : {round(test_f1*100, 2)}%')
from sklearn.metrics import plot_roc_curve
plot_roc_curve(logR, X_test, y_test)
plt.show()
2. 소프트맥스 회귀 (다중 클래스 분류)
로지스틱 회귀 모델을 2개 이상의 클래스인 다중 클래스를 분류하도록 일반화할 수 있다. 이 과정을 다항 로지스틱 회귀 또는 소프트맥스 회귀라고 한다. 소프트맥스 함수는 k개의 클래스를 분류할 때 k차원의 벡터를 입력받아 각 클래스에 대한 점수를 계산하고 그 점수에 소프트맥스 함수를 적용해 각 클래스의 확률을 추정한다.
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris
iris_load = load_iris()
x = pd.DataFrame(iris_load.data, columns = iris_load.feature_names)
y = load_iris().target
X_train, X_test, y_train, y_test = train_test_split(x, y, stratify=y, train_size = 0.7, random_state = 42)
softm = LogisticRegression(multi_class = 'multinomial', solver = 'lbfgs', C=10)
softm.fit(X_train, y_train)
from sklearn.metrics import confusion_matrix, accuracy_score
pred = softm.predict(X_test)
test_cm = confusion_matrix(y_test, pred)
test_acc = accuracy_score(y_test, pred)
print(test_cm)
print('\n')
print(f'정확도 : {round(test_acc*100, 2)}%')
반응형
'ADP로ML정리' 카테고리의 다른 글
6. 앙상블 모델 (0) | 2024.02.22 |
---|---|
5. 의사결정나무 Decision Tree (0) | 2024.02.20 |
4-1. 회귀 모델 - 규제가 있는 선형 회귀 (1) | 2024.02.19 |
3. 머신러닝 평가지표 (0) | 2024.02.15 |
2-6. 데이터 전처리 - 데이터 불균형 문제 해결 (1) | 2024.02.15 |