質問編集履歴

2

本来行いたかった質問へ変更しました。

2019/11/13 20:32

投稿

SyunSyun
SyunSyun

スコア24

test CHANGED
@@ -1 +1 @@
1
- 機械学習:特徴量数の調整
1
+ 機械学習:特徴量数を一つずつ加えて精度が上がるときにだけ、そ特徴量を採用したい。
test CHANGED
@@ -2,11 +2,13 @@
2
2
 
3
3
  現在取り組んでいる課題に500sampleで63個程度の特徴量の2項分類問題があります。
4
4
 
5
- その50個の特徴量の内から、カラムの2番目、3番目、4番目の3つだ取り出た場合の精度(ROC_AUC)をしりたのですが、「X has 3 features per sample; expecting 63」エラーが出ていま
5
+ 機械学習においては特徴量の数は多れば多いほど良いことが多いことは理解すが、本当にそうなのか確認と思いした
6
6
 
7
- が直すと3の特徴量を選択した場合の精度が出力きるか、指摘いただけるす。
7
+ で63特徴量内から、「特徴量1、2,3、、、63と一つずつ加えていき、精度(ROC_AUC)低下か上がらなければprint『特徴量Xは精度に貢献ません』とアラームを出す。」とうプログラミングを書き思ってが、エラーが出てしまいます
8
8
 
9
+
10
+
9
- ダミーdfは、
11
+ このダミーデータフレームは、
10
12
 
11
13
  https://github.com/yamanaka1/dammy2
12
14
 
@@ -14,9 +16,9 @@
14
16
 
15
17
 
16
18
 
19
+ こうするとうまくいくかも、、というアドバイスありましたら大変ありがたいです。
20
+
17
21
  ```python
18
-
19
-
20
22
 
21
23
  import numpy as np
22
24
 
@@ -32,38 +34,72 @@
32
34
 
33
35
 
34
36
 
35
- X = df1.iloc[:, [1,2,3]]
36
-
37
- y = df1.iloc[:,-1]
37
+ AUC = [0.5]
38
38
 
39
39
 
40
40
 
41
+ for a in np.arange(2,64,1):
42
+
43
+ X = df1.iloc[:, 1:a]
44
+
45
+ y = df1.iloc[:,-1]
46
+
47
+
48
+
41
- lr = LogisticRegression(C = 0.1, class_weight='balanced', random_state=0)
49
+ lr = LogisticRegression(C = 0.1, class_weight='balanced', random_state=0)
50
+
51
+
52
+
53
+ X_train, X_test, y_train, y_test = train_test_split(
54
+
55
+ X, y, test_size=0.2, random_state=0)
56
+
57
+ lr.fit(X_train, y_train)
58
+
59
+ cv_scores_train = cross_val_score(lr, X_train, y_train, cv = 3)
60
+
61
+ probs = lr.predict_proba(X_test)
62
+
63
+ probs2 = probs[:, 1]
64
+
65
+ auc = roc_auc_score(y_test, probs2)
66
+
67
+
68
+
69
+ if auc > AUC(-1):
70
+
71
+ print('AUC: {:.2f}'.format(auc))
72
+
73
+ AUC.append(auc)
74
+
75
+ else:
76
+
77
+ print('特徴量{}は精度に寄与しません'.format(a))
78
+
79
+ ```
42
80
 
43
81
 
44
82
 
45
- X_train, X_test, y_train, y_test = train_test_split(
83
+ ここでエラーは以下の様にでます。
46
84
 
85
+ TypeError Traceback (most recent call last)
86
+
87
+ <ipython-input-56-8bf996652a36> in <module>()
88
+
47
- X, y, test_size=0.2, random_state=0)
89
+ 22 auc = roc_auc_score(y_test, probs2)
90
+
91
+ 23
92
+
93
+ ---> 24 if auc > AUC(-1):
94
+
95
+ 25 print('AUC: {:.2f}'.format(auc))
96
+
97
+ 26 AUC.append(auc)
48
98
 
49
99
 
50
100
 
51
- lr.fit(X_train, y_train)
52
-
53
- cv_scores_train = cross_val_score(clf, X_train, y_train, cv = 3)
101
+ TypeError: 'list' object is not callable
54
102
 
55
103
 
56
104
 
57
- probs = clf.predict_proba(X_test)
58
-
59
- probs2 = probs[:, 1]
60
-
61
-
62
-
63
- auc = roc_auc_score(y_test, probs2)
64
-
65
- print('AUC: {:.2f}'.format(auc))
66
-
67
- ```
68
-
69
- アドバイスを頂けると大変ありがたいです。
105
+ listではよくないとありますが、アドバイスを頂けると大変ありがたいです。

1

ダミーデータフレームを追加しました。

2019/11/13 20:32

投稿

SyunSyun
SyunSyun

スコア24

test CHANGED
File without changes
test CHANGED
@@ -5,6 +5,16 @@
5
5
  その50個の特徴量の内から、カラムの2番目、3番目、4番目の3つだけ取り出した場合の精度(ROC_AUC)をしりたいのですが、「X has 3 features per sample; expecting 63」エラーが出てしまいます。
6
6
 
7
7
  どこが直すと3つのみの特徴量を選択した場合の精度が出力できるか、指摘していただけると幸いです。
8
+
9
+ ダミーdfは、
10
+
11
+ https://github.com/yamanaka1/dammy2
12
+
13
+ に置いてあります。
14
+
15
+
16
+
17
+ ```python
8
18
 
9
19
 
10
20
 
@@ -19,8 +29,6 @@
19
29
  from sklearn.metrics import roc_curve
20
30
 
21
31
  from sklearn.metrics import roc_auc_score
22
-
23
- from sklearn.metrics import confusion_matrix
24
32
 
25
33
 
26
34
 
@@ -55,3 +63,7 @@
55
63
  auc = roc_auc_score(y_test, probs2)
56
64
 
57
65
  print('AUC: {:.2f}'.format(auc))
66
+
67
+ ```
68
+
69
+ アドバイスを頂けると大変ありがたいです。