質問編集履歴

1

PGMの全文を開示いたしました。

2019/10/04 00:39

投稿

python_2019
python_2019

スコア68

test CHANGED
File without changes
test CHANGED
@@ -1,20 +1,164 @@
1
- サポートベクターマシンで学習済のモデルを、再利用すると、結果が異なってしまいます
1
+ サポートベクターマシンで学習済のモデルを、再利用すると、結果が異なってしまいます
2
+
3
+ ([0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 ]などの2値結果です)。
4
+
5
+
2
6
 
3
7
  データは同じなのですが、なぜでしょうか?
4
8
 
9
+ 以下、PGMの全文です。結果(2値)も掲示しました。
10
+
5
11
 
6
12
 
7
13
  ご指導頂ければ助かります。
8
14
 
9
15
 
10
16
 
11
- ----
17
+ **----
12
-
18
+
13
- 学習→学習済モデルを保存→ロード→未知データで結果確認
19
+ 学習→学習済モデルを保存→ロード→未知データで結果確認
20
+
14
-
21
+ (ロジスティック回帰分析→サポートベクターマシンの順番で処理しています。)
22
+
15
- ----
23
+ ----**
24
+
16
-
25
+ ```from pandas import Series,DataFrame
26
+
17
-
27
+ import pandas as pd
28
+
29
+
30
+
31
+ # エクセルの入力ファイル名、シート名を指定
32
+
33
+ df_X = pd.read_excel('target+notarget.xlsx',sheet_name='説明変数')
34
+
35
+ df_Y = pd.read_excel('target+notarget.xlsx',sheet_name='目的変数')
36
+
37
+
38
+
39
+ # 読み込んだデータを表示する
40
+
41
+ df_X.head()
42
+
43
+
44
+
45
+ # 条件のデータを表示する
46
+
47
+ df_Y.head()
48
+
49
+
50
+
51
+ #訓練データと評価用データに分割
52
+
53
+ from sklearn.model_selection import train_test_split as split
54
+
55
+ x_train, x_test, y_train, y_test = split(df_X,df_Y,train_size=0.8,test_size=0.2)
56
+
57
+
58
+
59
+ #教師あり学習の実行(ロジスティック回帰)
60
+
61
+ from sklearn.linear_model import LogisticRegression
62
+
63
+ model= LogisticRegression()
64
+
65
+ model.fit(x_train,y_train)
66
+
67
+
68
+
69
+ # 評価と精度の計算
70
+
71
+ from sklearn import metrics
72
+
73
+
74
+
75
+ #評価の実行
76
+
77
+ y_pred = model.predict(x_test)
78
+
79
+
80
+
81
+ # 精度の計算
82
+
83
+ print(metrics.accuracy_score(y_test,y_pred))
84
+
85
+
86
+
87
+ # ここから、SVM
88
+
89
+
90
+
91
+ # scikit-learn ライブラリの読み込み
92
+
93
+ from sklearn import datasets
94
+
95
+
96
+
97
+ # 学習器の作成。SVMというアルゴリズムを選択
98
+
99
+ from sklearn import svm
100
+
101
+ clf = svm.SVC()
102
+
103
+
104
+
105
+ # 訓練データとラベルで学習
106
+
107
+ clf.fit(x_train, y_train)
108
+
109
+
110
+
111
+ # テストデータで試した正解率を返す  
112
+
113
+ accuracy = clf.score(x_test, y_test)
114
+
115
+ print(f"正解率⇒ {accuracy}")
116
+
117
+
118
+
119
+ 正解率⇒ 0.825
120
+
121
+ classification report
122
+
123
+ precision recall f1-score support
124
+
125
+
126
+
127
+ 0 0.00 0.00 0.00 7
128
+
129
+ 1 0.82 1.00 0.90 33
130
+
131
+
132
+
133
+ accuracy 0.82 40
134
+
135
+ macro avg 0.41 0.50 0.45 40
136
+
137
+ weighted avg 0.68 0.82 0.75 40
138
+
139
+
140
+
141
+ # 学習済モデルを使ってテストデータを分類した結果を返す
142
+
143
+ predicted = clf.predict(x_test)
144
+
145
+
146
+
147
+ # 詳しいレポート
148
+
149
+ # precision(適合率): 選択した正解/選択した集合
150
+
151
+ # recall(再現率) : 選択した正解/全体の正解
152
+
153
+ # F-score(F値) : 適合率と再現率はトレードオフの関係にあるため
154
+
155
+ print("classification report")
156
+
157
+ print(metrics.classification_report(y_test, predicted))
158
+
159
+
160
+
161
+ # モデルを保存する
18
162
 
19
163
  import pickle
20
164
 
@@ -26,10 +170,16 @@
26
170
 
27
171
 
28
172
 
173
+ # 保存したモデルをロードする
174
+
29
175
  loaded_model = pickle.load(open(filename, 'rb'))
30
176
 
31
177
 
32
178
 
179
+ # 未知データを学習済モデル(SVM)で分類
180
+
181
+
182
+
33
183
  import numpy as np
34
184
 
35
185
  df1 = pd.read_excel('target+notarget_未知.xlsx',sheetname='説明変数')# 未知データのエクセル読み込み
@@ -42,27 +192,63 @@
42
192
 
43
193
 
44
194
 
195
+ C:\python\anaconda\pgm\lib\site-packages\pandas\util\_decorators.py:188: FutureWarning: The `sheetname` keyword is deprecated, use `sheet_name` instead
196
+
197
+ return func(*args, **kwargs)
198
+
199
+ [[ 10.07129 11.51457 11.76082 ... -8.489728 -8.04093
200
+
201
+ -7.381762 ]
202
+
203
+ [ -1.14947 0.02524982 1.102695 ... -10.32178 -13.35207
204
+
205
+ -14.82256 ]
206
+
207
+ [ 2.846096 3.02329 2.520598 ... 3.910414 6.817744
208
+
45
- **(結果)
209
+ 8.904238 ]
210
+
46
-
211
+ ...
212
+
213
+ [ 0.4724252 -1.992815 -3.942807 ... 0.5846236 0.8689489
214
+
215
+ 0.7559054 ]
216
+
217
+ [ 3.245025 3.993944 4.170406 ... -3.836895 -6.829057
218
+
219
+ -9.500171 ]
220
+
221
+ [ 3.627492 4.49755 4.667884 ... -11.4468 -10.76785
222
+
47
- 0 0 0 0 0 0 0 1 0 1 1 0 0 1 0 0 1 1 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1
223
+ -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
224
+
48
-
225
+ 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
226
+
49
- 1 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 1 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1**
227
+ 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
228
+
50
-
229
+ 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
230
+
51
-
231
+ 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
232
+
52
-
233
+ 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]
234
+
53
-
235
+ ```
54
-
236
+
237
+
238
+
239
+
240
+
55
- ----
241
+ **----
56
-
242
+
57
- 学習済モデルを再利用(読み込み)して、同じ未知データで結果確認
243
+ 学習済モデルを再利用(読み込み)して、同じ未知データで結果確認
58
-
244
+
59
- ----
245
+ ----**
60
-
61
-
62
-
246
+
63
- import pickle
247
+ ```import pickle
248
+
249
+
250
+
64
-
251
+ # 学習済モデル(SVM)のロード(読み込み)(モデルはすでに保存済)
65
-
66
252
 
67
253
  with open('ERP(SVM).sav', mode='rb') as fp:
68
254
 
@@ -76,54 +262,62 @@
76
262
 
77
263
 
78
264
 
265
+ # 未知データの読み込み
266
+
79
267
  df1 = pd.read_excel('target+notarget_未知.xlsx',sheet_name='説明変数')
80
268
 
81
269
  x_test_michi = np.array(df1)
82
270
 
271
+
272
+
273
+ # 未知データをロードした学習済モデルで予測
274
+
83
275
  y_test_michi = clf.predict(x_test_michi)
84
276
 
277
+
278
+
85
279
  print(x_test_michi,y_test_michi)
86
280
 
87
281
 
88
282
 
283
+ [[ 10.07129 11.51457 11.76082 ... -8.489728 -8.04093
284
+
285
+ -7.381762 ]
286
+
287
+ [ -1.14947 0.02524982 1.102695 ... -10.32178 -13.35207
288
+
289
+ -14.82256 ]
290
+
291
+ [ 2.846096 3.02329 2.520598 ... 3.910414 6.817744
292
+
89
- **(結果)
293
+ 8.904238 ]
294
+
90
-
295
+ ...
296
+
297
+ [ 0.4724252 -1.992815 -3.942807 ... 0.5846236 0.8689489
298
+
299
+ 0.7559054 ]
300
+
301
+ [ 3.245025 3.993944 4.170406 ... -3.836895 -6.829057
302
+
303
+ -9.500171 ]
304
+
305
+ [ 3.627492 4.49755 4.667884 ... -11.4468 -10.76785
306
+
307
+ -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
308
+
309
+ 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
310
+
91
- 0 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 0 0 0 1 1 1 1 0 0 0 1 1 1 1 1 1
311
+ 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
312
+
92
-
313
+ 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
314
+
93
- 1 0 1 1 1 1 1 1 0 1 1 0 1 0 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1**
315
+ 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
94
-
95
-
96
-
97
- ----
316
+
98
-
99
-
100
-
101
- ちなみに、学習時の精度は以下の通りです。
102
-
103
- 正解率⇒ 0.7666666666666667
104
-
105
- classification report
106
-
107
- precision recall f1-score support
108
-
109
-
110
-
111
- 0 0.00 0.00 0.00 14
317
+ 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0]
112
-
113
- 1 0.77 1.00 0.87 46
318
+
114
-
115
-
116
-
117
- accuracy 0.77 60
319
+
118
-
119
- macro avg 0.38 0.50 0.43 60
320
+
120
-
121
- weighted avg 0.59 0.77 0.67 60
122
-
123
-
124
-
125
- よろしくお願いいたします。
126
-
127
-
128
-
129
- ちなみに
321
+ コード
322
+
323
+ ```