1. ホーム
  2. python

RandomForestClassfier.fit()。ValueError: 文字列をfloatに変換できませんでした。

2023-10-08 07:30:04

質問

簡単なCSVファイルがあります。

A,B,C
Hello,Hi,0
Hola,Bueno,1

もちろん、実際のデータセットはこれよりもはるかに複雑ですが、このデータセットではエラーが再現されます。私はこのデータに対して、以下のようにランダムフォレスト分類器を構築しようとしています。

cols = ['A','B','C']
col_types = {'A': str, 'B': str, 'C': int}
test = pd.read_csv('test.csv', dtype=col_types)

train_y = test['C'] == 1
train_x = test[cols]

clf_rf = RandomForestClassifier(n_estimators=50)
clf_rf.fit(train_x, train_y)

しかし、fit()を呼び出すとこのようなトレースバックが発生するだけです。

ValueError: could not convert string to float: 'Bueno'

scikit-learnのバージョンは0.16.1です。

どのように解決するのですか?

fitを使う前にエンコードをする必要があります。fit()は文字列を受け付けないとのことですが、これを解決する方法です。

使用できるクラスはいくつかあります。

個人的には、ほぼ 同じ質問 を StackOverflow に投稿したことがあります。私はスケーラブルなソリューションを持ちたかったのですが、どんな回答も得られませんでした。私はすべての文字列を2値化するOneHotEncoderを選択しました。これは非常に効果的ですが、多くの異なる文字列がある場合、行列は非常に迅速に成長し、メモリが必要になります。