解決したいこと
以下の2つの学習モデルを等しくしたいと思っています。
前者はPipelineを用いて作成したモデル、後者は、前者のモデルを参考に自力で作成したモデルになります。
比較した際、roc_auc_score
やpredict_proba
は等しくなるのですが、accuracy_score
の値だけがなぜか異なってしまいます...。どのようにすれば等しくできるでしょうか?
詳しい方が居りましたら、ご教授頂きたいです。
試したコード
Pipeline
を使用したモデル
python
1(一部省略) 2 3 4# パイプライン 5pipe = Pipeline([ 6 ('scale', MinMaxScaler()), 7 ('clf', LogisticRegression()) 8 ]) 9 10param_dict = { 11 "clf__C": [0.001 * x for x in range(1, 1001)], 12} 13 14grid_search = GridSearchCV(pipe, param_dict, cv=10, return_train_score=False, scoring="roc_auc") 15grid_search.fit(train_X, train_y) 16 17print('Best parameters:', grid_search.best_params_) 18print('Best auc on validation set:', grid_search.best_score_) 19 20pred = grid_search.predict(test_X) 21print('Test set accuracy with best parameters: {}'.format(accuracy_score(test_y, pred))) 22print('Test set AUC with best parameters: {}'.format(roc_auc_score(test_y, pred)))
出力
Best parameters: {'clf__C': 0.005} Best auc on validation set: 0.700801749271137 Test set accuracy with best parameters: 0.7547547547547547 Test set AUC with best parameters: 0.7017017017017015
上記の出力を参考に自力で作成したモデル
python
1scalar = MinMaxScaler().fit(train_X) 2train_X_scaled = scalar.transform(train_X) 3test_X_scaled = scalar.transform(test_X) 4 5lr = LogisticRegression(C=0.005) 6lr.fit(train_X_scaled, train_y) 7pred = lr.predict(test_X_scaled) 8print('Test set accuracy with best parameters: {}'.format(accuracy_score(test_y, pred))) 9print('Test set AUC with best parameters: {}'.format(roc_auc_score(test_y, pred)))
出力
Test set accuracy with best parameters: 0.71875 Test set AUC with best parameters: 0.7017017017017015
このように、roc_auc_score
は等しくなるのですが、accuracy_score
が一致しません。
AUCが偶然等しくなった可能性を考え、両者のpredict_proba
を確認したところ、完全に一致しておりました。
また、データ分割の割合を変えて同じコードを実行しても、やはりaccuracy_score
のみが一致しません。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/19 03:07
2019/11/19 03:57