質問編集履歴

4

書式の改善

2019/11/18 17:11

投稿

dal
dal

スコア38

test CHANGED
File without changes
test CHANGED
@@ -12,6 +12,130 @@
12
12
 
13
13
  ```python
14
14
 
15
+ (一部省略)
16
+
17
+
18
+
19
+ X = df_all
20
+
21
+ y = df["label"]
22
+
23
+
24
+
25
+ (train_X , test_X , train_y , test_y) = train_test_split(X, y, test_size = 0.25, random_state = 0, shuffle=False)
26
+
27
+
28
+
29
+ param_dict = {
30
+
31
+ "C": [0.1 * x for x in range(1, 1001)],
32
+
33
+ "gamma": [0.01 * x for x in range(1, 10)]
34
+
35
+ }
36
+
37
+
38
+
39
+ scalar = MinMaxScaler().fit(train_X)
40
+
41
+ train_X_scaled = scalar.transform(train_X)
42
+
43
+ test_X_scaled = scalar.transform(test_X)
44
+
45
+
46
+
47
+ grid_search = GridSearchCV(SVC(), param_dict, cv=10, return_train_score=False, scoring="roc_auc")
48
+
49
+ grid_search.fit(train_X_scaled, train_y)
50
+
51
+
52
+
53
+ best_parameters = grid_search.best_params_
54
+
55
+ svc = SVC(**best_parameters, random_state=0, probability=True)
56
+
57
+
58
+
59
+ svc.fit(train_X_scaled, train_y)
60
+
61
+ pred = svc.predict(test_X_scaled)
62
+
63
+
64
+
65
+ print('Test set AUC with best parameters: {}'.format(roc_auc_score(pred, test_y)))
66
+
67
+ ```
68
+
69
+
70
+
71
+ 上コード内の
72
+
73
+ ```python
74
+
75
+ scalar = MinMaxScaler().fit(train_X)
76
+
77
+ train_X_scaled = scalar.transform(train_X)
78
+
79
+ test_X_scaled = scalar.transform(test_X)
80
+
81
+ ```
82
+
83
+ の部分で`train_X`を利用して`train_X`と`test_X`を正規化しています。
84
+
85
+ しかし、自分で調べたとことろ、`test_X_scaled = scalar.transform(test_X)`を書かずに、
86
+
87
+ ```python
88
+
89
+ svc.fit(train_X_scaled, train_y)
90
+
91
+ pred = svc.predict(test_X_scaled)
92
+
93
+ ```
94
+
95
+ の部分を
96
+
97
+ ```python
98
+
99
+ svc.fit(train_X_scaled, train_y)
100
+
101
+ svc.predict(test_X)
102
+
103
+ ```
104
+
105
+ としている文献があったり、
106
+
107
+
108
+
109
+ 別の疑問として、
110
+
111
+
112
+
113
+ `train_X`をまるごと正規化して交差検証の対象にしている
114
+
115
+ =**交差検証において**、「学習データ(`train_X_scaled`の9/10)」が本来学習に使うべきでない「テストデータ(`train_X_scaled`の1/10)」も含めたデータ全体(`train_X_scaled`)で正規化されている
116
+
117
+ =**交差検証で**過学習が起こっているのではないか?
118
+
119
+
120
+
121
+ という考えが生じ、頭がこんがらがっています。
122
+
123
+
124
+
125
+ 詳しい方がいましたら、SVMでグリッドサーチを使用する際の、適切な正規化の方法をご教授頂きたいです。
126
+
127
+ よろしくお願いいたします。
128
+
129
+
130
+
131
+ # 追記
132
+
133
+ 頂いた回答を参考に修正してみました。このコードで適切に書けているでしょうか?
134
+
135
+
136
+
137
+ ```python
138
+
15
139
  //(一部省略)
16
140
 
17
141
 
@@ -26,36 +150,50 @@
26
150
 
27
151
 
28
152
 
153
+ # パイプライン
154
+
155
+ pipe = Pipeline([
156
+
157
+ ('scale', MinMaxScaler()),
158
+
159
+ ('clf', SVC())
160
+
161
+ ])
162
+
163
+
164
+
29
165
  param_dict = {
30
166
 
31
- "C": [0.1 * x for x in range(1, 1001)],
167
+ "clf__C": [0.1 * x for x in range(1, 1001)],
32
-
168
+
33
- "gamma": [0.01 * x for x in range(1, 10)]
169
+ "clf__gamma": [0.01 * x for x in range(1, 10)]
34
170
 
35
171
  }
36
172
 
37
173
 
38
174
 
175
+ grid_search = GridSearchCV(pipe, param_dict, cv=10, return_train_score=False, scoring="roc_auc")
176
+
177
+ grid_search.fit(train_X, train_y)
178
+
179
+
180
+
181
+ best_parameters = {}
182
+
183
+ best_parameters['C'] = grid_search.best_params_['clf__C']
184
+
185
+ best_parameters['gamma'] = grid_search.best_params_['clf__gamma']
186
+
187
+ svc = SVC(**best_parameters, random_state=0, probability=True)
188
+
189
+
190
+
39
191
  scalar = MinMaxScaler().fit(train_X)
40
192
 
41
- train_X_scaled = scalar.transform(train_X)
193
+ trainVal_X_scaled = scalar.transform(train_X)
42
194
 
43
195
  test_X_scaled = scalar.transform(test_X)
44
196
 
45
-
46
-
47
- grid_search = GridSearchCV(SVC(), param_dict, cv=10, return_train_score=False, scoring="roc_auc")
48
-
49
- grid_search.fit(train_X_scaled, train_y)
50
-
51
-
52
-
53
- best_parameters = grid_search.best_params_
54
-
55
- svc = SVC(**best_parameters, random_state=0, probability=True)
56
-
57
-
58
-
59
197
  svc.fit(train_X_scaled, train_y)
60
198
 
61
199
  pred = svc.predict(test_X_scaled)
@@ -65,141 +203,3 @@
65
203
  print('Test set AUC with best parameters: {}'.format(roc_auc_score(pred, test_y)))
66
204
 
67
205
  ```
68
-
69
-
70
-
71
- 上コード内の
72
-
73
- ```python
74
-
75
- scalar = MinMaxScaler().fit(train_X)
76
-
77
- train_X_scaled = scalar.transform(train_X)
78
-
79
- test_X_scaled = scalar.transform(test_X)
80
-
81
- ```
82
-
83
- の部分で`train_X`を利用して`train_X`と`test_X`を正規化しています。
84
-
85
- しかし、自分で調べたとことろ、`test_X_scaled = scalar.transform(test_X)`を書かずに、
86
-
87
- ```python
88
-
89
- svc.fit(train_X_scaled, train_y)
90
-
91
- pred = svc.predict(test_X_scaled)
92
-
93
- ```
94
-
95
- の部分を
96
-
97
- ```python
98
-
99
- svc.fit(train_X_scaled, train_y)
100
-
101
- svc.predict(test_X)
102
-
103
- ```
104
-
105
- としている文献があったり、
106
-
107
-
108
-
109
- 別の疑問として、
110
-
111
-
112
-
113
- `train_X`をまるごと正規化して交差検証の対象にしている
114
-
115
- =**交差検証において**、「学習データ(`train_X_scaled`の9/10)」が本来学習に使うべきでない「テストデータ(`train_X_scaled`の1/10)」も含めたデータ全体(`train_X_scaled`)で正規化されている
116
-
117
- =**交差検証で**過学習が起こっているのではないか?
118
-
119
-
120
-
121
- という考えが生じ、頭がこんがらがっています。
122
-
123
-
124
-
125
- 詳しい方がいましたら、SVMでグリッドサーチを使用する際の、適切な正規化の方法をご教授頂きたいです。
126
-
127
- よろしくお願いいたします。
128
-
129
-
130
-
131
- # 追記
132
-
133
- 頂いた回答を参考に修正してみました。このコードで適切に書けているでしょうか?
134
-
135
-
136
-
137
- ```python
138
-
139
- //(一部省略)
140
-
141
-
142
-
143
- X = df_all
144
-
145
- y = df["label"]
146
-
147
-
148
-
149
- (train_X , test_X , train_y , test_y) = train_test_split(X, y, test_size = 0.25, random_state = 0, shuffle=False)
150
-
151
-
152
-
153
- # パイプライン
154
-
155
- pipe = Pipeline([
156
-
157
- ('scale', MinMaxScaler()),
158
-
159
- ('clf', SVC())
160
-
161
- ])
162
-
163
-
164
-
165
- param_dict = {
166
-
167
- "clf__C": [0.1 * x for x in range(1, 1001)],
168
-
169
- "clf__gamma": [0.01 * x for x in range(1, 10)]
170
-
171
- }
172
-
173
-
174
-
175
- grid_search = GridSearchCV(pipe, param_dict, cv=10, return_train_score=False, scoring="roc_auc")
176
-
177
- grid_search.fit(train_X, train_y)
178
-
179
-
180
-
181
- best_parameters = {}
182
-
183
- best_parameters['C'] = grid_search.best_params_['clf__C']
184
-
185
- best_parameters['gamma'] = grid_search.best_params_['clf__gamma']
186
-
187
- svc = SVC(**best_parameters, random_state=0, probability=True)
188
-
189
-
190
-
191
- scalar = MinMaxScaler().fit(train_X)
192
-
193
- trainVal_X_scaled = scalar.transform(train_X)
194
-
195
- test_X_scaled = scalar.transform(test_X)
196
-
197
- svc.fit(train_X_scaled, train_y)
198
-
199
- pred = svc.predict(test_X_scaled)
200
-
201
-
202
-
203
- print('Test set AUC with best parameters: {}'.format(roc_auc_score(pred, test_y)))
204
-
205
- ```

3

書式の改善

2019/11/18 17:11

投稿

dal
dal

スコア38

test CHANGED
File without changes
test CHANGED
@@ -188,9 +188,9 @@
188
188
 
189
189
 
190
190
 
191
- scalar = MinMaxScaler().fit(trainVal_X)
191
+ scalar = MinMaxScaler().fit(train_X)
192
-
192
+
193
- trainVal_X_scaled = scalar.transform(trainVal_X)
193
+ trainVal_X_scaled = scalar.transform(train_X)
194
194
 
195
195
  test_X_scaled = scalar.transform(test_X)
196
196
 

2

内容の追加

2019/11/18 14:56

投稿

dal
dal

スコア38

test CHANGED
File without changes
test CHANGED
@@ -125,3 +125,81 @@
125
125
  詳しい方がいましたら、SVMでグリッドサーチを使用する際の、適切な正規化の方法をご教授頂きたいです。
126
126
 
127
127
  よろしくお願いいたします。
128
+
129
+
130
+
131
+ # 追記
132
+
133
+ 頂いた回答を参考に修正してみました。このコードで適切に書けているでしょうか?
134
+
135
+
136
+
137
+ ```python
138
+
139
+ //(一部省略)
140
+
141
+
142
+
143
+ X = df_all
144
+
145
+ y = df["label"]
146
+
147
+
148
+
149
+ (train_X , test_X , train_y , test_y) = train_test_split(X, y, test_size = 0.25, random_state = 0, shuffle=False)
150
+
151
+
152
+
153
+ # パイプライン
154
+
155
+ pipe = Pipeline([
156
+
157
+ ('scale', MinMaxScaler()),
158
+
159
+ ('clf', SVC())
160
+
161
+ ])
162
+
163
+
164
+
165
+ param_dict = {
166
+
167
+ "clf__C": [0.1 * x for x in range(1, 1001)],
168
+
169
+ "clf__gamma": [0.01 * x for x in range(1, 10)]
170
+
171
+ }
172
+
173
+
174
+
175
+ grid_search = GridSearchCV(pipe, param_dict, cv=10, return_train_score=False, scoring="roc_auc")
176
+
177
+ grid_search.fit(train_X, train_y)
178
+
179
+
180
+
181
+ best_parameters = {}
182
+
183
+ best_parameters['C'] = grid_search.best_params_['clf__C']
184
+
185
+ best_parameters['gamma'] = grid_search.best_params_['clf__gamma']
186
+
187
+ svc = SVC(**best_parameters, random_state=0, probability=True)
188
+
189
+
190
+
191
+ scalar = MinMaxScaler().fit(trainVal_X)
192
+
193
+ trainVal_X_scaled = scalar.transform(trainVal_X)
194
+
195
+ test_X_scaled = scalar.transform(test_X)
196
+
197
+ svc.fit(train_X_scaled, train_y)
198
+
199
+ pred = svc.predict(test_X_scaled)
200
+
201
+
202
+
203
+ print('Test set AUC with best parameters: {}'.format(roc_auc_score(pred, test_y)))
204
+
205
+ ```

1

書式の改善

2019/11/18 14:55

投稿

dal
dal

スコア38

test CHANGED
@@ -1 +1 @@
1
- 【scikit-learn】SVMグリッドサーチにおける正規化の方法(Scalerの使い方)について
1
+ 【scikit-learn】SVMグリッドサーチを使用す際の正規化(Scalerの使い方)について
test CHANGED
@@ -104,13 +104,19 @@
104
104
 
105
105
  としている文献があったり、
106
106
 
107
+
108
+
107
109
  別の疑問として、
110
+
111
+
108
112
 
109
113
  `train_X`をまるごと正規化して交差検証の対象にしている
110
114
 
111
115
  =**交差検証において**、「学習データ(`train_X_scaled`の9/10)」が本来学習に使うべきでない「テストデータ(`train_X_scaled`の1/10)」も含めたデータ全体(`train_X_scaled`)で正規化されている
112
116
 
113
117
  =**交差検証で**過学習が起こっているのではないか?
118
+
119
+
114
120
 
115
121
  という考えが生じ、頭がこんがらがっています。
116
122