質問内容
私はいま、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????
エラー発生コード
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
となり、同じ特徴量は存在しないことが確認できています。
### 謝辞
自分では埒が明かないように感じ、今回質問させていただきました。どうかよろしくお願いいたします。