Diabetes 파일을 이용해서 다음 실습을 완료하시오
STEP1
1. estimator: logisticRegressor
2. test_train_split: 0.2, 156(random state)
3. 정확도, 정밀도, 재현율을 구하시오
diabetes.csv 파일을 import 한다.
y에는 outcome의 결과값이 들어간다.
177pg에는 X, y 데이터를 다른 방법으로 호출했다.
data1=data.iloc[:, :] row, column 데이터가 전부 다 담긴다.
data2=data.iloc[:, :-1] row는 전부 다 선택, column은 가장 마지막에서 한 줄을 제외한다.>>feature데이터
data3=data.iloc[:, -1] row는 전부 다 선택, column은 가장 마지막에 있는 한 줄만 포함한다.>>test데이터
STEP2
4. threshold에 의한 정밀도, 재현율 그래프를 구하시오: precision_recall_curve_plot
5. ['Glucose', 'BloodPressure', 'SkinThickness', 'Insulin', 'BMI'] 각 Column에서 0이 차지하는 비율 구하기
6. 각 feature들의 element들 중에서 0의 값을 평균값으로 대체
내가 작성한 답 (precision_recall_curve_plot 함수가 다음과 같은 에러메시지와 함께 구현되지 않음)
51줄을 지웠지만 그래프는 그려지지 않는다. 선생님이 써주신 다음 코드를 추가해서 다시 그래프를 그려보았다.
plt.plot(thresholds, precisions[ 0:len(thresholds)])
plt.plot(thresholds, recalls[ 0:len(thresholds)])
선생님의 답 (설명)
threshold, recall, precision 데이터 사이즈가 일정하지 않아서 [0:len(thresholds)] 슬라이싱을 해서 그래프를 그려야 한다.
내가 작성한 답 두 번째
선생님의 답 두 번째
zero_features = ['Glucose', 'BloodPressure', 'SkinThickness', 'Insulin', 'BMI')
for row in zero features;
temp=X[X[row]==0][row]
print ( round ( (temp.shape[0]/X.shape[0]) * 100, 2) )
X[row] = X[row].replace(0, X[row].mean() )
빨간부분은 feature의 DataFrame 형태 값이다. X(원본데이터프래임)의 X[row]==0 의 boolean값을 X의 인덱스로 접근함. 예를들어 Glucose가 0의 값을 가진 데이터프래임의 집합일 것이다. 거기에 [row]를 추가하면 그 데이터 프레임의 Glucose Column 한 줄을 말한다. Temp는 Glucose가 0인 데이터의 개수의 shape[0], 즉, 데이터 사이즈를 말한다. X.shape[0]은 전체 데이터의 개수를 말한다.
참고) stratify=y는 y(결정값)라는 변수의 분포로 train_test_split를 해달라는 뜻
STEP3
7. StandardScaler 클래스로 feature 데이트 세트에 스케일링 적용
8. LogisticRegression 이용 학습 및 예측 (train_test_split에서 parameter 중 stratify=y 설정)
9. thresholds = [0.3, 0.33, 0.36, 0.39, 0.42, 0.45, 0.48, 0.50]
10. 5개의 성능지표가 있는데, 5개 성능지표의 평균이 가장 높은 thresholds값을 구하여라
참고) 책에 나온대로 getget_clf_eval(y_test,pred,pred_proba)와 get_eval_by_threshold(y_test, pred_proba[:,1], reshape(-1,1), thresholds) 함수를 사용했는데 000 is not defined 라는 Name Error가 뜬다. 그 이유는 이전 코드에서 함수를 def하지 않았기 때문이다. (책은 이전 코드를 사용한다는 전제로 구성됨)
pred_proba.reshape(-1, 1)를 하는 이유는 binarizer 클래스를 사용할 때 dimension error가 나온기 때문이다. (binarizer는 2차원 데이터를 사용한다)
참고) threshold값이 변화면 정확도, 정밀도, 재현율, F1값은 변하지만 AUC(곡선아래넓이)값은 변하지 않는다.
'살콤아내 자기계발 > 파이썬' 카테고리의 다른 글
파이썬 머신러닝 완벽가이드 4주차 정리 (분류 202pg~) (0) | 2021.05.11 |
---|---|
파이썬 머신러닝 완벽가이드 4주차 정리 (분류 183pg~) (0) | 2021.05.07 |
파이썬 머신러닝 완벽가이드 3주차 정리 (평가 147pg~) (0) | 2021.04.30 |
파이썬 머신러닝 완벽가이드 2주차 정리 (사이킷런 131pg, 타이타닉 생존자 예측) (0) | 2021.04.29 |
파이썬 머신러닝 완벽가이드 2주차 정리 (데이터 전처리 118pg~, ) (0) | 2021.04.28 |