質問編集履歴

1

主題以外を削除しました。

2019/04/13 06:10

投稿

noraNingen
noraNingen

スコア10

test CHANGED
@@ -1 +1 @@
1
- XGBoostとOptuna異常検知、学習は完了最後のpredictで止まる
1
+ XGBoostで学習予測のpredictで止まる
test CHANGED
@@ -1,8 +1,4 @@
1
- Python使って1年です。
2
-
3
-
4
-
5
- XGBoostをOptunaでtrain実行後、正解率は93%などと普通に動いているのですが、新しい単体データにOptunaのベストパラメータを適応させようとすると
1
+ XGBoostをOptunaでtrain実行後、新しい単体データにOptunaのベストパラメータを適応させ予測しようとすると
6
2
 
7
3
  ```py
8
4
 
@@ -14,71 +10,13 @@
14
10
 
15
11
  と出てしまい、先に進めません。
16
12
 
13
+
14
+
17
15
  先にエラーを書いておきます。
18
16
 
19
17
 
20
18
 
21
- ######1)
22
-
23
- こちらはできれば解決したい問題で本題ではありませんが、同じ処理意中に引っかかる謎なので書いておきます。。
24
-
25
- ・Optunaで取得したstudy.best_paramsの入った変数を表示すると中身は
26
-
27
- ```py
28
-
29
- {'lambda': 0.009596759923584417,
30
-
31
- 'colsample_bytree': 3.284318314389523e-08,
32
-
33
- 'subsample': 0.9366206333393168,
34
-
35
- 'alpha': 0.000870145500994164,
36
-
37
- 'eta': 0.00016247954503511786,
38
-
39
- 'n_estimators': 88,
40
-
41
- 'grow_policy': 'lossguide',
42
-
43
- 'max_depth': 5,
44
-
45
- 'booster': 'gbtree',
46
-
47
- 'gamma': 0.133612797073536,
48
-
49
- 'learning_rate': 3.876709282406857e-08}
50
-
51
- ```
52
-
53
- なのですが、xgb.XGBClassifier(study.best_params)をかけてやると、
54
-
55
- ```py
56
-
57
- XGBClassifier(base_score=0.5, booster='gbtree', colsample_bylevel=1,
58
-
59
- colsample_bytree=1, gamma=0, learning_rate=0.1, max_delta_step=0,
60
-
61
- max_depth={'lambda': 0.009596759923584417, 'colsample_bytree': 3.284318314389523e-08, 'subsample': 0.9366206333393168, 'alpha': 0.000870145500994164, 'eta': 0.00016247954503511786, 'n_estimators': 88, 'grow_policy': 'lossguide', 'max_depth': 5, 'booster': 'gbtree', 'gamma': 0.133612797073536, 'learning_rate': 3.876709282406857e-08},
62
-
63
- min_child_weight=1, missing=None, n_estimators=100, n_jobs=1,
64
-
65
- nthread=None, objective='binary:logistic', random_state=0,
66
-
67
- reg_alpha=0, reg_lambda=1, scale_pos_weight=1, seed=None,
68
-
69
- silent=True, subsample=1)
70
-
71
- ```
72
-
73
- のように、max_depth=の中に検出したベストパラメーターが入れ子になっているような感じです。
74
-
75
- パラメータをバラで記述してやるとちゃんと入るのですが、プログラムも長くなり処理コストも掛かるので、できればそのまま引っ張ってこれる形にしたいです。
76
-
77
-
78
-
79
- ######2)
80
-
81
- こちらが本題のエラーです。
19
+ ######エラー
82
20
 
83
21
  ・predictのところで以下のエラーが出ます。以下エラー表示
84
22
 
@@ -156,33 +94,23 @@
156
94
 
157
95
  listDataStraight = std_scl.transform(listDataStraight)#正規化 ndarray
158
96
 
97
+
98
+
159
- #こので学習時もSVMでも問題なく通った。
99
+ #データをXGB専用式に整える
100
+
101
+ dataMatrixNew = xgb.DMatrix(listDataStraight)
160
102
 
161
103
 
162
104
 
163
- #XGB専用形式に整える
105
+ #パラメーターを整える
164
106
 
107
+ optp = optuna.study.load_study()
108
+
165
- dataMatrixNew = xgb.DMatrix(listDataStraight)#これをしないと、前処理してねと言われる
109
+ modelXGBparam = xgb.XGBClassifier(optp)
166
110
 
167
111
 
168
112
 
169
- #パラメーター一式を整える
170
-
171
- testBestParam = study.best_params
172
-
173
- modelXGBparam = xgb.XGBClassifier(testBestParam)
174
-
175
- #modelXGBparam 取得をやめて(この行の処理を削除して次の行の最後のカッコ内に)直接、
176
-
177
- #study.best_paramsを投入すると、辞書形式ではPredictできませんと言われる
178
-
179
- #study.best_valueを投入すると、浮動小数点形式ではPredictできませんと言われる
180
-
181
- #study.best_trialを投入すると、FrozenTrial形式ではPredictできませんと言われる
182
-
183
-
184
-
185
- #最終判断 ここで2)のエラーが起きます
113
+ #最終判断 ここでエラーが起きます
186
114
 
187
115
  XXXX=modelXGBparam.predict(dataMatrixNew)
188
116
 
@@ -192,12 +120,22 @@
192
120
 
193
121
 
194
122
 
123
+
124
+
195
125
  ```
196
126
 
197
127
  補足情報
128
+
129
+ 似たようなやり取りを一つだけ見つけたのですが、今ひとつ理解できません。
130
+
131
+ [https://stackoverflow.com/questions/53506997/exception-during-xgboost-prediction-can-not-initialize-dmatrix-from-dmatrix?rq=1](https://stackoverflow.com/questions/53506997/exception-during-xgboost-prediction-can-not-initialize-dmatrix-from-dmatrix?rq=1)
132
+
133
+
134
+
135
+
198
136
 
199
137
  python3.5
200
138
 
201
139
  XGBoost0.82
202
140
 
203
- 他に試したことはエラーコードcore.pyから削除してみる、パラメータを一旦保存してみる、いろいろアップデートしてみるなど。総当たり戦を1週間もやりすぎてわけがわからなくなりました。。なにかヒントをお持ちの方導きお願いいたします。
141
+ 主題以外の部分を削除しました。ご存知の方ご教示お願いします。