前提
PythonでOne-class SVMと混同行列を用いて、TPRやTNRの値をテキストファイルに出力するプログラムを作っています。データ数は50行あります。
処理するデータを7行のデータに絞り、1行ずつずらしていく機能を実装中に以下のエラーメッセージが発生しました。
(1から7行目まで→2から8行目まで→3から9行目までのようにずらしていく)
初投稿なのですが、どなたかご教示いただけますと幸いです。
発生している問題・エラーメッセージ
tp,fn,fp,tn=cm.flatten()
ValueError: not enough values to unpack (expected 4, got 1)
該当のソースコード
import pandas as pd from sklearn.svm import OneClassSVM from sklearn.metrics import confusion_matrix #データの選択 dataname = 'csvファイル_a' def main(): for i in range(1): Regression(i) def Regression(i): filename = dataname+".txt" myfile = open(filename,"w") imagename = dataname+"_gamma=1.png" figname = "Result - "+dataname print("データ数,tp,fn,fp,tn,TPR,TNR",file=myfile) for i in range(1,44,1): df_train = pd.read_csv(dataname+'.csv',skiprows=1,names=['a','b','c','d','e','f','g','h']) df_train = df_train[i:i+6] df_train_re = df_train.drop(['h'],axis=1) X_train = df_train_re.to_numpy() Y_train = df_train['h'].to_numpy() num = i for j in range(1,num+1,1): clf = OneClassSVM(kernel='rbf',gamma = 1,nu = 0.1 ) clf.fit(X_train) Y_pred = clf.predict(X_train) cm=confusion_matrix(Y_train,Y_pred) tp,fn,fp,tn=cm.flatten() TPR = tp/(tp+fn) TNR = tn/(fp+tn) if j == num: print(i,i+6,",",tp,",",fn,",",fp,",",tn,",",TPR,",",TNR,file=myfile) print("=========================================") print("gamma=",1," nu=",k) print("tp=",tp," fn=",fn," fp=",fp," tn=",tn) print("TPR=",TPR," TNR=",TNR) myfile.close() if __name__ == "__main__": main()
試したこと
df_train = df_train[i:i+6]の部分なのですが、df_train[:i+6]にすると、エラーは出ず、7行ずつ処理されるデータが増えていきました。df_train[a:b]のaの部分を指定するとエラーが出ます。
補足情報(FW/ツールのバージョンなど)
csvファイルは画像のようなデータで、51行目まであります。
0 コメント