適合率、再現率の計算でわからないこと
解決済
回答 1
投稿
- 評価
- クリップ 1
- VIEW 399
前回の質問のかいもあってコードを実行することができ、実際に実行したのですがaccuracyやf1等のscoreがすべて同じ値になりました。これはどういう状況でしょうか。それとも現在組んでいるコードでは足りない箇所があるのでしょうか。
分かる方がいらしたら教えてください。
実際のコードが以下です
# -*- coding: utf-8 -*-
import scipy as sp
import pandas as pd
from pandas import Series, DataFrame
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import RandomForestClassifier #RandomForest
from sklearn.svm import SVC # SVM用
import lightgbm as lgb
from sklearn.metrics import confusion_matrix #混同行列
from sklearn.metrics import accuracy_score, precision_score #適合率
from sklearn.metrics import recall_score, f1_score #再現率,F1スコア
from sklearn.metrics import make_scorer
def SVM(X_train_std, X_test_std, Y_train, Y_test):
model_SVM = SVC(kernel = "rbf", C = 763.8 , gamma = 0.0197 )
#学習モデル構築。引数に訓練データの特徴量と、それに対応したラベル
model_SVM.fit(X_train_std,Y_train)
#予測したクラスラベル
Y_pred = model_SVM.predict(X_test_std)
#print(Y_pred.shape)
#print(Y_pred)
#print(Y_test.shape)
#print(Y_test)
# .scoreで正解率を算出。
print("\nSVM")
print("train score:",model_SVM.score(X_train_std,Y_train))
print("test score:",model_SVM.score(X_test_std,Y_test))
Y_test=Y_test.values
print("accuracy score:",accuracy_score(Y_test, Y_pred))
print("precision score:",precision_score(Y_test, Y_pred,average='micro'))
print("recall score:",recall_score(Y_test, Y_pred,average='micro'))
print("f1 score:",f1_score(Y_test, Y_pred,average='micro'))
def GBM(X_train, X_test, Y_train, Y_test):
model_GBM = lgb.LGBMClassifier(boosting_type='gbdt', num_leaves=58,
max_depth=14, learning_rate=0.1, n_estimators=940,
min_child_samples=40, importance_type="split", random_state=0)
#学習モデル構築。引数に訓練データの特徴量と、それに対応したラベル
model_GBM.fit(X_train, Y_train)
#予測したクラスラベル
Y_pred = model_GBM.predict(X_test)
# .scoreで正解率を算出。
print("\nGBM")
print("train score:",model_GBM.score(X_train,Y_train))
print("test score:",model_GBM.score(X_test,Y_test))
Y_test=Y_test.values
print("accuracy score:",accuracy_score(Y_test, Y_pred))
print("precision score:",precision_score(Y_test, Y_pred,average='micro'))
print("recall score:",recall_score(Y_test, Y_pred,average='micro'))
print("f1 score:",f1_score(Y_test, Y_pred,average='micro'))
def main():
"""
TODO case_nameに任意の名前を指定
フォルダを統一するために以降のscriptも名前を統一する
"""
case_name = "case3"
# ---------------------------------------
case_dir = "./casestudy/{}/".format(case_name)
input_csv_name = "2_extracted_features_original.csv"
input_csv_path = case_dir + input_csv_name
input_df = pd.read_csv(input_csv_path, encoding="utf-8-sig")
#すべてのデータを対象に分類を行う場合
#-----------------------------------------------------------------------
task = "all"
train_df = input_df[input_df["train_test_flag"] == 0]
test_df = input_df[input_df["train_test_flag"] == 1]
# print(train_df)
# print(test_df)
X_train = train_df.loc[:, "contrast":"inverse_difference_m_norm"]
X_test = test_df.loc[:, "contrast":"inverse_difference_m_norm"]
# print(X_train)
# print(X_test)
Y_train = train_df["category"]
Y_test = test_df["category"]
# print(Y_train)
sc = StandardScaler()
sc.fit(X_train)
X_train_std = sc.transform(X_train)
X_test_std = sc.transform(X_test)
# print(X_train_std)
# print(X_test_std)
# #------------------------------------------------------------------------
SVM(X_train_std, X_test_std, Y_train, Y_test)
GBM(X_train, X_test, Y_train, Y_test)
if __name__ == "__main__":
main()
実際に出た結果がこちらです。
SVM
train score: 0.8728841145833334
test score: 0.771484375
accuracy score: 0.771484375
precision score: 0.771484375
recall score: 0.771484375
f1 score: 0.771484375
GBM
train score: 1.0
test score: 0.7096354166666666
accuracy score: 0.7096354166666666
precision score: 0.7096354166666666
recall score: 0.7096354166666666
f1 score: 0.7096354166666666
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
0
多クラス分類問題において、マイクロ平均による精度、適合率、再現率、F値はすべて同じ値になります。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.09%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる