質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

2331閲覧

相関の高い特徴量のうち、目的変数との相関が小さいほうを除く

nouken

総合スコア369

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2018/06/18 04:14

機械学習で6577 rows × 3507 columnsのデータセットを扱っており、特徴量が3506(残り一つは目的変数です)と多いので、相関の高い二つの特徴量のうち目的変数との相関の低いほうを除きたいのですが、以下のエラーが解消できません。ちなみに以下のコードのdataが6577 rows × 3507 columnsのデータセットで、データフレームの一番左のコラムが目的変数(0か1の二値)です。どうぞよろしくお願いいたします。

python

1 2def correlation(dataset, threshold): 3 col_corr = set() # Set of all the names of deleted columns 4 corr_matrix = dataset.corr() 5 for i in range(len(corr_matrix.columns)): 6 for j in range(i): 7 if corr_matrix.iloc[i, j] >= threshold: 8 x=np.array(dataset.iloc[:, i], data['Target']) 9 y=np.array(dataset.iloc[:, j], data['Target']) 10 if np.corrcoef(x, rowvar=False) > np.corrcoef(y, rowvar=False): 11 12 colname = corr_matrix.columns[j] # getting the name of column 13 col_corr.add(colname) 14 if colname in dataset.columns: 15 del dataset[colname] 16 else: 17 colname = corr_matrix.columns[i] 18 col_corr.add(colname) 19 if colname in dataset.columns: 20 del dataset[colname] # deleting the column from the dataset 21 22 23data_corr=correlation(data.iloc[:, 1:], 0.7) 24 25 26 27IndexError Traceback (most recent call last) 28<ipython-input-31-a7760ef4bd26> in <module>() 29----> 1 data_corr=correlation(data.iloc[:, 1:], 0.7) 30 31<ipython-input-30-66af95ffe0ab> in correlation(dataset, threshold) 32 5 for j in range(i): 33 6 if corr_matrix.iloc[i, j] >= threshold: 34----> 7 x=np.array(dataset.iloc[:, i], data['Target']) 35 8 y=np.array(dataset.iloc[:, j], data['Target']) 36 9 if np.corrcoef(x, rowvar=False) > np.corrcoef(y, rowvar=False): 37 38~\Miniconda3\lib\site-packages\pandas\core\indexing.py in __getitem__(self, key) 39 1365 except (KeyError, IndexError): 40 1366 pass 41-> 1367 return self._getitem_tuple(key) 42 1368 else: 43 1369 # we by definition only have the 0th axis 44 45~\Miniconda3\lib\site-packages\pandas\core\indexing.py in _getitem_tuple(self, tup) 46 1735 def _getitem_tuple(self, tup): 47 1736 48-> 1737 self._has_valid_tuple(tup) 49 1738 try: 50 1739 return self._getitem_lowerdim(tup) 51 52~\Miniconda3\lib\site-packages\pandas\core\indexing.py in _has_valid_tuple(self, key) 53 202 if i >= self.obj.ndim: 54 203 raise IndexingError('Too many indexers') 55--> 204 if not self._has_valid_type(k, i): 56 205 raise ValueError("Location based indexing can only have " 57 206 "[{types}] types" 58 59~\Miniconda3\lib\site-packages\pandas\core\indexing.py in _has_valid_type(self, key, axis) 60 1670 return True 61 1671 elif is_integer(key): 62-> 1672 return self._is_valid_integer(key, axis) 63 1673 elif is_list_like_indexer(key): 64 1674 return self._is_valid_list_like(key, axis) 65 66~\Miniconda3\lib\site-packages\pandas\core\indexing.py in _is_valid_integer(self, key, axis) 67 1711 l = len(ax) 68 1712 if key >= l or key < -l: 69-> 1713 raise IndexError("single positional indexer is out-of-bounds") 70 1714 return True 71 1715 72 73IndexError: single positional indexer is out-of-bounds 74

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

IndexError: single positional indexer is out-of-bounds

は範囲外のインデックスを指定した時のエラーです。data.iloc(dataset.iloc)あたりが怪しいです。
datasetに想定通りのカラム数があるかなど確認されるとよろしいかと思います。
おそらく途中で

python

1del dataset[colname]

されているので、そこでカラム数が減ってインデックスが範囲外になっていると思われます。

補足:
意図的にやられているのであれば問題ないですが、単に多すぎる説明変数を有効なものに減らすという趣旨であれば
elastic net, lassoなどの手法が簡易かつ有用なので検討されるとよろしいかと。

投稿2020/07/05 07:37

aokikenichi

総合スコア2210

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nouken

2020/07/05 08:52

すみません、自己解決法を示すのを完全に忘れておりました。 助かりました。
aokikenichi

2020/07/05 08:54

解決済みでしたので、出過ぎたまねで大変失礼いたしました。 同業と思われます。やればやるだけ奥が深いですね。お互い頑張りましょう。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問