質問編集履歴
1
主題以外を削除しました。
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
XGBoost
|
1
|
+
XGBoostで学習後、予測のpredictで止まる
|
test
CHANGED
@@ -1,8 +1,4 @@
|
|
1
|
-
Python使って1年です。
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
XGBoostをOptunaでtrain実行後、
|
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
|
-
|
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
|
-
#
|
99
|
+
#データをXGB専用形式に整える
|
100
|
+
|
101
|
+
dataMatrixNew = xgb.DMatrix(listDataStraight)
|
160
102
|
|
161
103
|
|
162
104
|
|
163
|
-
#
|
105
|
+
#パラメーターを整える
|
164
106
|
|
107
|
+
optp = optuna.study.load_study()
|
108
|
+
|
165
|
-
da
|
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
|
-
#最終判断 ここで
|
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
|
-
|
141
|
+
主題以外の部分を削除しました。ご存知の方ご教示お願いします。
|