1. ホーム
  2. python

[解決済み] Scikit-learn。True Positive, True Negative, False Positive, False Negativeの取得方法。

2023-04-15 10:44:16

質問

私の問題です。

大きなJSONファイルであるデータセットがあります。私はそれを読み、それを trainList 変数に格納します。

次に、前処理をします - これを使えるようにするために。

それが終わると、分類を始めます。

  1. 私は kfold クロスバリデーション法を用いて,平均精度を求め 平均精度を求め、分類器を学習する。
  2. 予測を行い、そのフォールドの精度& 混同行列を取得します。
  3. この後 True Positive(TP) , True Negative(TN) , False Positive(FP)False Negative(FN) の値を取得します。これらのパラメータを使って 感度 特異性 .

最後に、各ラベルのTPが表示されたチャートを表示するために、これを利用してHTMLを記述します。

コードです。

今のところ持っている変数

trainList #It is a list with all the data of my dataset in JSON form
labelList #It is a list with all the labels of my data 

メソッドの大部分

#I transform the data from JSON form to a numerical one
X=vec.fit_transform(trainList)

#I scale the matrix (don't know why but without it, it makes an error)
X=preprocessing.scale(X.toarray())

#I generate a KFold in order to make cross validation
kf = KFold(len(X), n_folds=10, indices=True, shuffle=True, random_state=1)

#I start the cross validation
for train_indices, test_indices in kf:
    X_train=[X[ii] for ii in train_indices]
    X_test=[X[ii] for ii in test_indices]
    y_train=[listaLabels[ii] for ii in train_indices]
    y_test=[listaLabels[ii] for ii in test_indices]

    #I train the classifier
    trained=qda.fit(X_train,y_train)

    #I make the predictions
    predicted=qda.predict(X_test)

    #I obtain the accuracy of this fold
    ac=accuracy_score(predicted,y_test)

    #I obtain the confusion matrix
    cm=confusion_matrix(y_test, predicted)

    #I should calculate the TP,TN, FP and FN 
    #I don't know how to continue

どのように解決するのですか?

予測値と実測値の2つのリストがあれば、以下のようにTP、FP、TN、FNを計算する関数に渡すことができます。

def perf_measure(y_actual, y_hat):
    TP = 0
    FP = 0
    TN = 0
    FN = 0

    for i in range(len(y_hat)): 
        if y_actual[i]==y_hat[i]==1:
           TP += 1
        if y_hat[i]==1 and y_actual[i]!=y_hat[i]:
           FP += 1
        if y_actual[i]==y_hat[i]==0:
           TN += 1
        if y_hat[i]==0 and y_actual[i]!=y_hat[i]:
           FN += 1

    return(TP, FP, TN, FN)

ここから、興味のある率や、特異度や感度などの性能指標を計算できるようになると思います。