サポートベクターマシンで学習済のモデルを、再利用すると、結果が異なってしまいます
([0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 ]などの2値結果です)。
データは同じなのですが、なぜでしょうか?
以下、PGMの全文です。結果(2値)も掲示しました。
ご指導頂ければ助かります。
----
①学習→学習済モデルを保存→ロード→未知データで結果確認
(ロジスティック回帰分析→サポートベクターマシンの順番で処理しています。)
----
from
1import pandas as pd 2 3# エクセルの入力ファイル名、シート名を指定 4df_X = pd.read_excel('target+notarget.xlsx',sheet_name='説明変数') 5df_Y = pd.read_excel('target+notarget.xlsx',sheet_name='目的変数') 6 7# 読み込んだデータを表示する 8df_X.head() 9 10# 条件のデータを表示する 11df_Y.head() 12 13#訓練データと評価用データに分割 14from sklearn.model_selection import train_test_split as split 15x_train, x_test, y_train, y_test = split(df_X,df_Y,train_size=0.8,test_size=0.2) 16 17#教師あり学習の実行(ロジスティック回帰) 18from sklearn.linear_model import LogisticRegression 19model= LogisticRegression() 20model.fit(x_train,y_train) 21 22# 評価と精度の計算 23from sklearn import metrics 24 25#評価の実行 26y_pred = model.predict(x_test) 27 28# 精度の計算 29print(metrics.accuracy_score(y_test,y_pred)) 30 31# ここから、SVM 32 33# scikit-learn ライブラリの読み込み 34from sklearn import datasets 35 36# 学習器の作成。SVMというアルゴリズムを選択 37from sklearn import svm 38clf = svm.SVC() 39 40# 訓練データとラベルで学習 41clf.fit(x_train, y_train) 42 43# テストデータで試した正解率を返す 44accuracy = clf.score(x_test, y_test) 45print(f"正解率⇒ {accuracy}") 46 47正解率⇒ 0.825 48classification report 49 precision recall f1-score support 50 51 0 0.00 0.00 0.00 7 52 1 0.82 1.00 0.90 33 53 54 accuracy 0.82 40 55 macro avg 0.41 0.50 0.45 40 56weighted avg 0.68 0.82 0.75 40 57 58# 学習済モデルを使ってテストデータを分類した結果を返す 59predicted = clf.predict(x_test) 60 61# 詳しいレポート 62# precision(適合率): 選択した正解/選択した集合 63# recall(再現率) : 選択した正解/全体の正解 64# F-score(F値) : 適合率と再現率はトレードオフの関係にあるため 65print("classification report") 66print(metrics.classification_report(y_test, predicted)) 67 68# モデルを保存する 69import pickle 70 71filename = 'ERP(SVM).sav' 72pickle.dump(model, open(filename, 'wb')) 73 74# 保存したモデルをロードする 75loaded_model = pickle.load(open(filename, 'rb')) 76 77# 未知データを学習済モデル(SVM)で分類 78 79import numpy as np 80df1 = pd.read_excel('target+notarget_未知.xlsx',sheetname='説明変数')# 未知データのエクセル読み込み 81X_pred = np.array(df1) 82y_pred = clf.predict(X_pred)# 学習済モデル(SVM)を使って分類(0、1) 83print(X_pred,y_pred) 84 85C:\python\anaconda\pgm\lib\site-packages\pandas\util\_decorators.py:188: FutureWarning: The `sheetname` keyword is deprecated, use `sheet_name` instead 86 return func(*args, **kwargs) 87[[ 10.07129 11.51457 11.76082 ... -8.489728 -8.04093 88 -7.381762 ] 89 [ -1.14947 0.02524982 1.102695 ... -10.32178 -13.35207 90 -14.82256 ] 91 [ 2.846096 3.02329 2.520598 ... 3.910414 6.817744 92 8.904238 ] 93 ... 94 [ 0.4724252 -1.992815 -3.942807 ... 0.5846236 0.8689489 95 0.7559054 ] 96 [ 3.245025 3.993944 4.170406 ... -3.836895 -6.829057 97 -9.500171 ] 98 [ 3.627492 4.49755 4.667884 ... -11.4468 -10.76785 99 -9.549679 ]] [0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 0 0 0 1 0 0 0 0 0 1 0 0 1 0 0 0 1 0 0 100 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 101 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 102 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 103 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 104 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]
----
②学習済モデルを再利用(読み込み)して、同じ未知データで結果確認
----
import
1 2# 学習済モデル(SVM)のロード(読み込み)(モデルはすでに保存済) 3with open('ERP(SVM).sav', mode='rb') as fp: 4 clf = pickle.load(fp) 5 6import numpy as np 7import pandas as pd 8 9# 未知データの読み込み 10df1 = pd.read_excel('target+notarget_未知.xlsx',sheet_name='説明変数') 11x_test_michi = np.array(df1) 12 13# 未知データをロードした学習済モデルで予測 14y_test_michi = clf.predict(x_test_michi) 15 16print(x_test_michi,y_test_michi) 17 18[[ 10.07129 11.51457 11.76082 ... -8.489728 -8.04093 19 -7.381762 ] 20 [ -1.14947 0.02524982 1.102695 ... -10.32178 -13.35207 21 -14.82256 ] 22 [ 2.846096 3.02329 2.520598 ... 3.910414 6.817744 23 8.904238 ] 24 ... 25 [ 0.4724252 -1.992815 -3.942807 ... 0.5846236 0.8689489 26 0.7559054 ] 27 [ 3.245025 3.993944 4.170406 ... -3.836895 -6.829057 28 -9.500171 ] 29 [ 3.627492 4.49755 4.667884 ... -11.4468 -10.76785 30 -9.549679 ]] [0 0 1 0 1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 1 1 0 0 0 0 1 1 1 0 0 0 0 0 1 1 1 0 31 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 32 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 33 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 0 34 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 35 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0] 36 37コード
回答2件
あなたの回答
tips
プレビュー