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

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

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

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

Python

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

Q&A

解決済

2回答

2979閲覧

PythonでPCAを実施した際のエラー

iziz

総合スコア8

機械学習

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

Python

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

0グッド

0クリップ

投稿2020/03/28 16:42

編集2020/03/31 11:34

参考書に記載されている方法でがんの遺伝子発現量のPCAを試しにやっています。
下記のコードを実行すると

python

1import math 2import numpy as np 3import pandas as pd 4import matplotlib.pyplot as plt 5from sklearn.decomposition import PCA 6from sklearn.preprocessing import scale 7 8df = pd.read_table('all_FPKMs_remove_zero.txt',index_col=0) 9df_scale = scale(df.T) 10 11pca = PCA() 12pca.fit(df_scale) 13 14print('主成分',pca.components_.round(4)) 15print('平均',pca.mean_) 16print('共分散',pca.get_covariance()) 17print('各次元の寄与率',pca.explained_variance_ratio_) 18print('累積寄与率',sum(pca.explained_variance_ratio_)) 19print('標準偏差',[math.sqrt(u) for u in pca.explained_variance_]) 20 21fuka = pca.components_*np.c_[np.sqrt(pca.explained_variance_)].T 22print('負荷\n',fuka.round(4)) 23 24transformed = pca.fit_transform(df_scale) 25plt.scatter( [u[0] for u in transformed], [u[1] for u in transformed] ) 26plt.title('PCA of RNA seq') 27plt.grid() 28plt.xlabel('pc1') 29plt.ylabel('pc2') 30plt.show() 31 32下記の様なエラーが出ます 33 34ValueError: Input contains NaN, infinity or a value too large for dtype('float64'). 35

エラーの内容と対処法について教えて下さい。

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

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

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

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

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

guest

回答2

0

エラーの内容と対処法を教えて頂けないでしょうか。

まず、どの行でエラーになっているのかを確認するところからでしょうか。

Tracebackが出ますので、まずはそれをご自身で読んでいただきましょう。このサイトで支援を求めるのであれば、質問を編集して質問文にまるごと貼り付けてください。

エラーメッセージ「だけ」ではそんなに情報量はありませんが、Tracebackも読めばある程度のことはわかります。自分のプログラムのどの部分がエラーを発生させているのか、ライブラリの中でどんな経路をたどってエラーになっているのか等。

これでたぶんエラーの原因になっているデータくらいはわかるので、めちゃくちゃでかいとかでなければ印字して確認してみるのが一番いいと思いますが……

ValueError: Input contains NaN, infinity or a value too large for dtype('float64').

NaN, inf, -inf, その他そもそも浮動小数点数型に変換できないようなデータが混ざっている、ということを言っているにすぎないので、これ自体では情報はほとんどないです。

投稿2020/03/29 05:28

hayataka2049

総合スコア30933

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

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

iziz

2020/03/29 07:03

ありがとうございます。 下記がエラー文になります。 Traceback (most recent call last): File "PCA_gdc.py", line 12, in <module> pca.fit(df_scale) File "/home/usr/.local/lib/python3.6/site-packages/sklearn/decomposition/_pca.py", line 344, in fit self._fit(X) File "/home/usr/.local/lib/python3.6/site-packages/sklearn/decomposition/_pca.py", line 391, in _fit copy=self.copy) File "/home/usr/.local/lib/python3.6/site-packages/sklearn/utils/validation.py", line 578, in check_array allow_nan=force_all_finite == 'allow-nan') File "/home/usr/.local/lib/python3.6/site-packages/sklearn/utils/validation.py", line 60, in _assert_all_finite msg_dtype if msg_dtype is not None else X.dtype) ValueError: Input contains NaN, infinity or a value too large for dtype('float64'). ちなみに、データはかなり大きいです。 txtファイルは60000行×1300列で、900Mくらいあります。 それが原因でしょうか。
hayataka2049

2020/03/29 08:15

ここに書かれると他の方にとって見づらいので、エラーは質問文の方にお願いします(コードブロックを使った方が良いでしょう)。 巨大データでそのエラーになるということはないはずです。ただ、PCAに素直にかけるにはきついサイズですが。 nanがあるのかもしれませんが、Doggoさんの回答されているdf_scale.isnull().sum()の結果はどうなりますか? また、infに関してもnumpy.isinfを使って同様に調べてみてください。
iziz

2020/03/30 15:58

ご指摘の通り、nullを含むサンプルが含まれていましたので、それを除外したら実行自体はできそうです。infも調べましたが、それは含まれていませんでした。 今度はmemory errorと表示されました。
hayataka2049

2020/03/30 16:02 編集

別の問題だと思うので、こちらの質問は解決済みとし(Doggoさんか私のどちらかをBAにしていただければ構いません)、改めて質問を立ててください。 その際、質問文は元の内容に戻しておいてください。回答との関連性がわからなくなるとあとから見る人にとって不都合です。
iziz

2020/03/30 16:17

承知しました、別途質問させて頂きます。また宜しくお願い致します。
iziz

2020/03/31 11:34

失礼いたしました。最初の投稿内容に戻しました。
guest

0

ベストアンサー

エラーの内容から、pca.fit()が引数に取ったdf_scaleに空値があることが考えられます。
以下のコードを実行して、空値があるか確認してみてください。
df_scale.isnull().sum()
もし空値があるようでしたら、空値を何らかの値で埋めるか、空値のある行を削除してからもう一度実行してみてください。

投稿2020/03/28 18:33

Doggo

総合スコア12

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

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

iziz

2020/03/29 00:38

ありがとうごいざいます。 空値というのは、0ではなく、値がblankになっているということでしょうか? 全てのカラムで値が0の遺伝子(行)は下記のコードで取り除いています。 import pandas as pd df = pd.read_table('all_FPKMs_merged_2.txt',sep=('\t'),index_col=0) all_zero_index = df.index[df.sum(axis=1)==0] df = df.drop(all_zero_index) df.to_csv('all_FPKMs_remove_zero.txt',sep='\t')
iziz

2020/03/30 15:56

ご指摘の通り、nullが含まれるサンプルがありました。それを除外したら実行自体はできました。メモリー不足みたいなエラーが出てしまいましたが。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問