列車とテストセットでランダムフォレスト分類を実行する次のコードに取り組んでいます。
from sklearn.ensemble import RandomForestClassifier
from numpy import genfromtxt, savetxt
def main():
dataset = genfromtxt(open('filepath','r'), delimiter=' ', dtype='f8')
target = [x[0] for x in dataset]
train = [x[1:] for x in dataset]
test = genfromtxt(open('filepath','r'), delimiter=' ', dtype='f8')
rf = RandomForestClassifier(n_estimators=100)
rf.fit(train, target)
predicted_probs = [[index + 1, x[1]] for index, x in enumerate(rf.predict_proba(test))]
savetxt('filepath', predicted_probs, delimiter=',', fmt='%d,%f',
header='Id,PredictedProbability', comments = '')
if __name__=="__main__":
main()
ただし、実行時に次のエラーが発生します。
----> dataset = genfromtxt(open('C:/Users/Saurabh/Desktop/pgm/Cora/a_train.csv','r'), delimiter='', dtype='f8')
ValueError: Some errors were detected !
Line #88 (got 1435 columns instead of 1434)
Line #93 (got 1435 columns instead of 1434)
Line #164 (got 1435 columns instead of 1434)
Line #169 (got 1435 columns instead of 1434)
Line #524 (got 1435 columns instead of 1434)
...
...
...
それをどのように回避するかについての提案はありますか?ありがとう。
列の数に不整合が検出されると、例外が発生します。いくつかの理由と解決策が考えられます。
問題の行をスキップするには、_invalid_raise = False
_を追加します。
dataset = genfromtxt(open('data.csv','r'), delimiter='', invalid_raise = False)
データに名前が含まれている場合は、フィールド名にスペースや無効な文字が含まれていないこと、またはインタープリターを混乱させる可能性がある標準属性(サイズや形状など)の名前に対応していないことを確認してください。
deletechars
名前から削除する必要があるすべての文字を組み合わせた文字列を提供します。デフォルトでは、無効な文字は
~!@#$%^&*()-=+~\|]}[{';: /?.>,<.
です
excludelist
_
return, file, print…
_など、除外する名前のリストを指定します。入力名の1つがこのリストの一部である場合、アンダースコア文字( '_')が追加されます。_
case_sensitive
_名前で大文字と小文字を区別する必要があるか(_
case_sensitive=True
_)、大文字(_case_sensitive=False
_または_case_sensitive='upper'
_)に変換するか、小文字(_case_sensitive='lower'
_)に変換するか。
_data = np.genfromtxt("data.txt", dtype=None, names=True,\
deletechars="~!@#$%^&*()-=+~\|]}[{';: /?.>,<.", case_sensitive=True)
_
リファレンス: numpy.genfromtxt
1つの行の列が多すぎます。例えば
>>> import numpy as np
>>> from StringIO import StringIO
>>> s = """
... 1 2 3 4
... 1 2 3 4 5
... """
>>> np.genfromtxt(StringIO(s),delimiter=" ")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib64/python2.6/site-packages/numpy/lib/npyio.py", line 1654, in genfromtxt
raise ValueError(errmsg)
ValueError: Some errors were detected !
Line #2 (got 5 columns instead of 4)
列名を含むヘッダーには、データ自体より1列多いようです(ヘッダーの1435列とデータの1434列)。
次のいずれかを実行できます。
1)データでは意味をなさない1列をヘッダーから削除する
OR
2)genfromtxt()のスキップヘッダーを使用します。たとえば、np.genfromtxt('myfile', skip_header=*how many lines to skip*, delimiter=' ')
documentation に詳細情報があります。
このエラーが発生しました。原因は、スペースのある私のデータの単一のエントリでした。これにより、追加の行として表示されていました。すべてのデータですべての間隔が一貫していることを確認してください。
私の場合、行に特殊記号があるためにエラーが発生しました。
エラーの原因:次のような特殊文字がある
Csvファイルの例
1、hello、'、this'、失敗
numpyをnumpyデータとしてインポートする= numpy.genfromtxt(file、delimiter = delimeter)#Error
環境メモ:
[〜#〜] os [〜#〜]:Ubuntu
csvエディター:LibreOffice
[〜#〜] ide [〜#〜]:Pycharm
また、genfromtextを使用してテキストデータセットをロードし、Kerasを使用してテキスト分類を実行しようとしたときにも、このエラーが発生しました。
データ形式は次のとおりです:[some_text]\t[class_label]
。私の理解では、第1列にパーサーを混乱させるいくつかの文字があり、2つの列を適切に分割できないということでした。
data = np.genfromtxt(my_file.csv, delimiter='\t', usecols=(0,1), dtype=str);
このスニペットはあなたと同じValueErrorを作成し、私の最初の回避策はすべてを1つの列として読み取ることでした:
data = np.genfromtxt(my_file, delimiter='\t', usecols=(0), dtype=str);
後で自分でデータを分割します。
ただし、最終的に適切に機能したのは、genfromtxtでコメントパラメータを明示的に定義することでした。
data = np.genfromtxt(my_file, delimiter='\t', usecols=(0,1), dtype=str, comments=None);
ドキュメントによると:
オプションの引数コメントは、コメントの開始を示す文字列を定義するために使用されます。デフォルトでは、genfromtxtは、comments = '#'を想定しています。コメントマーカーは行のどこにでも置くことができます。 コメントマーカーの後にある文字はすべて無視されます。
コメントを示すデフォルトの文字は「#」であるため、この文字がテキスト列に含まれている場合、その後のすべては無視されます。これが、2つの列をgenfromtextで認識できない理由です。