🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

機械学習

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

Q&A

1回答

665閲覧

/sklearn/feature_selection/univariate_selection.py内でのエラー

SHS

総合スコア7

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

機械学習

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

0グッド

1クリップ

投稿2019/12/10 04:00

編集2019/12/10 06:14

質問内容

私はいま、machine-learning-notebook/sklearn/feature_selection/univariate_selection.py内で時々エラーが発生します(yの要素をひとつずつ更新するプログラムなので、yによってエラーが出てしまっているようです)。原因は、0で割ってしまっている箇所があるからだと考えております。そこで実際にfeature_selection や univariate_selection.py の中身を拝見しているのですが、どこを直せば自分のコードが改善されるのかわかりません。

変数

python

1type(X) #pandas.core.frame.DataFrame 2X.shape #(20, 20) 3 4type(y) #pandas.core.series.Series 5y.shape #(20,) 6#X, yともにバイナリ

ファイルの載せ方がわからなかったので図を載せます。????
X????
イメージ説明

y????
イメージ説明

エラー発生コード

python

1selector = SelectKBest(score_func=f_regression, k=num_select) 2selector.fit(X, y)

該当エラー

/usr/local/Caskroom/miniconda/base/lib/python3.7/site-packages/sklearn/feature_selection/univariate_selection.py in fit(self, X, y) 347 348 self._check_params(X, y) --> 349 score_func_ret = self.score_func(X, y) 350 if isinstance(score_func_ret, (list, tuple)): 351 self.scores_, self.pvalues_ = score_func_ret /usr/local/Caskroom/miniconda/base/lib/python3.7/site-packages/sklearn/feature_selection/univariate_selection.py in f_regression(X, y, center) 302 # convert to p-value 303 degrees_of_freedom = y.size - (2 if center else 1) --> 304 F = corr ** 2 / (1 - corr ** 2) * degrees_of_freedom 305 pv = stats.f.sf(F, 1, degrees_of_freedom) 306 return F, pv RuntimeWarning: divide by zero encountered in true_divide

試したこと

python

1if (1 - corr ** 2 ==0): 2 continue

上記のコードを追加いたしましたら、univariate_selection.pyの中でX_normsが定義されていないという
理由からまたエラーが発生しました。そこで解決すべく、

python

1X_norms = np.sqrt(row_norms(X.T, squared=True) - 2 n_samples * X_means ** 2)

も書くことにしましたが、すると、"typeはdではなくlでないといけない"と、更にエラーが発生しました。

ちなみに、特徴量の分散や同じ特徴量が存在するのかを確認してみたところ、

python

1#特徴量の分散や同じ特徴量が存在するのかを確認 2from sklearn.feature_selection import VarianceThreshold 3sel = VarianceThreshold(threshold=0) 4sel.fit(X) 5 6# get_supportで保持するデータのみをTrue値、そうでないものはFalse値を返します 7print(sum(sel.get_support())) #20

となり、同じ特徴量は存在しないことが確認できています。

### 謝辞
自分では埒が明かないように感じ、今回質問させていただきました。どうかよろしくお願いいたします。

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

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

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

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

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

y_waiwai

2019/12/10 04:37

エラーが出ている関数、及びその周辺のコードを提示しましょう
SHS

2019/12/10 05:21

ご指摘ありがとうございます。 `selector = SelectKBest(score_func=f_regression, k=num_select)` `selector.fit(X, y)` の箇所です。どうぞよろしくお願い致します。
guest

回答1

0

分散が0(すべての要素が同じ値)の特徴量が混ざっていたりしませんか?

VarianceThresholdとPipelineにすると良いかもしれません。

sklearn.feature_selection.VarianceThreshold — scikit-learn 0.22 documentation

投稿2019/12/10 04:45

hayataka2049

総合スコア30935

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

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

SHS

2019/12/10 05:24

ご回答ありがとうございます。実はすべての要素が同じ特徴量は入っておりません。
hayataka2049

2019/12/10 05:29

だとすると、完全に相関する特徴量があったりしますか?(ざっくりコードを見た感じだと、そっちかも)
hayataka2049

2019/12/10 05:32

と思ってみましたが、違うかもしれません。Xとyを再現できるように質問に追記していただくと良いかと思います。 (再現性がないと困るので、CSVと読み込みのコードを)
SHS

2019/12/10 06:17

ご指摘ありがとうございます。もしよろしければご確認していただけると嬉しいです。
hayataka2049

2019/12/10 06:30 編集

画像で載られても困ります(手入力しろって?)。 せめてto_csvした結果をテキストで貼り付けてください。
SHS

2019/12/10 06:43

ご指摘ありがとうございます、かしこまりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問