로지스틱리그레션은 이름은 회귀이지만 분류모델에 사용한다.
기존의 선형회귀 모델이 있을때 확률이 음과 양의 방향으로 무한대로 뻗어 나간다.
그래서 옆의 그림처럼 로지스틱회귀 모델처럼 변화해 줘야한다.

# 불러오기
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import confusion_matrix, classification_report
# 선언하기
model = LogisticRegression()
# 학습하기
model.fit(x_train, y_train)
# 예측하기
y_pred = model.predict(x_test)
# 평가하기
print(confusion_matrix(y_test, y_pred))
print(classification_report(y_test, y_pred))
# 예측값 확인
print(y_test.values[:20])
print(y_pred[:20])
# 확률값 확인
p = model.predict_proba(x_test)
print(p[:20])
# 임계값 조정 0.44
p1 = p[:, [1]]
y_pred2 = np.array(['1 if x > 0.44 else 0 for x in p1])
# 성능평가
print(y_pred2[:20])
print(classification_report(y_test, y_pred2))
K분할교차검증
cross_val_score(모델, x_train, y_train, cv=분할개수)# 불러오기
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import cross_val_score
# 선언하기
model = DecisionTreeClassifier(max_depth=3)
# 검증하기
cv_score = cross_val_score(model, x_train, y_train, cv=10)
# 확인
print(cv_score)
print(cv_score.mean())
# 저장
result = {}
result['DecisionTree'] = cv_score.mean()
... KNN, Linear Regression저장

# 시각화
plt.figure(figsize=(5, 3))
plt.barh(list(result), result.values())
plt.xlabel('Score')
plt.ylabel('Model')
plt.show()

# 실제 값과 비교
model = DecisionTreeRegressor()
model.fit(x_train, y_train)
y_pred = model.predict(x_test)
from sklearn.metrics import mean_absolute_error, r2_score
print('MAE: ', mean_absolute_error(y_test, y_pred))
print('R2: ', r2_score(y_test, y_pred))



max_depth나 n_estimators 등을 구할때 사용# 파라미터 하나인 경우
param = {'n_neighbors': range(1,101)}
- 100번 수행되면서 모든 경우의 성능 확인
# 파라미터 두개인 경우
param = {'n_neighbors': range(1,101)
'metric' : ['euclidean', 'manhattan']}
- metric 값이 2개라 200개 조합이 만들어짐
- 200번 수행되면서 모든 경우의 성능 확인
GridSearchCV# 함수 불러오기
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import GridSearchCV
# 파라미터 선언
param = {'n_neighbors': range(1,500,10),
'metric' : ['euclidean', 'manhattan']}
# 기본모델 선언
knn_model = KNeighborsClassifier()
# Grid Search 선언
model = GridSearchCV(knn_model,
param,
cv=3) # n_iter 없음
# 모델 학습
model.fit(x_train, y_train)
# 수행정보
model.cv_result_
# 최적 파라미터
model.best_params_
# 최적 성능
model.best_score_
# 파라미터 하나인 경우
param = {'n_neighbors': range(1,101)}
- 지정한 개수의 임의의 값에 대해서만 성능 확인
# 파라미터 두개인 경우
param = {'n_neighbors': range(1,101)
'metric' : ['euclidean', 'manhattan']}
- 지정한 개수의 임의의 조합에 대해서만 성능 확인
RandomizedSearchCVn_iter 개수 지정# 함수 불러오기
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import RandomizedSearchCV
# 파라미터 선언
param = {'n_neighbors': range(1,500,10),
'metric' : ['euclidean', 'manhattan']}
# 기본모델 선언
knn_model = KNeighborsClassifier()
# Random Search 선언
model = RandomizedSearchCV(knn_model,
param,
cv=3,
n_iter=20)
# 모델 학습
model.fit(x_train, y_train)
# 수행정보
model.cv_result_['mean_test_score']
# 최적 파라미터
model.best_params_
# 최적 성능
model.best_score_