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

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

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

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

機械学習

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

Python

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

2回答

2785閲覧

could not convert string to float: 'retired'

kato9090

総合スコア0

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

機械学習

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

Python

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2021/04/10 17:03

編集2021/04/11 11:12

Pythonで決定木モデルの学習をしています。

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

のエラーメッセージが発生し、数字ではないのでどのように改善すればいいか悩んでいます。

jobにretiredはあります。

イメージ説明

発生している問題・エラーメッセージ


ValueError Traceback (most recent call last)
<ipython-input-54-273928de9d56> in <module>
----> 1 tree.fit(train_X, train_y)

/opt/anaconda3/lib/python3.8/site-packages/sklearn/tree/_classes.py in fit(self, X, y, sample_weight, check_input, X_idx_sorted)
888 """
889
--> 890 super().fit(
891 X, y,
892 sample_weight=sample_weight,

/opt/anaconda3/lib/python3.8/site-packages/sklearn/tree/_classes.py in fit(self, X, y, sample_weight, check_input, X_idx_sorted)
154 check_X_params = dict(dtype=DTYPE, accept_sparse="csc")
155 check_y_params = dict(ensure_2d=False, dtype=None)
--> 156 X, y = self._validate_data(X, y,
157 validate_separately=(check_X_params,
158 check_y_params))

/opt/anaconda3/lib/python3.8/site-packages/sklearn/base.py in _validate_data(self, X, y, reset, validate_separately, **check_params)
427 # :(
428 check_X_params, check_y_params = validate_separately
--> 429 X = check_array(X, **check_X_params)
430 y = check_array(y, **check_y_params)
431 else:

/opt/anaconda3/lib/python3.8/site-packages/sklearn/utils/validation.py in inner_f(*args, **kwargs)
70 FutureWarning)
71 kwargs.update({k: arg for k, arg in zip(sig.parameters, args)})
---> 72 return f(**kwargs)
73 return inner_f
74

/opt/anaconda3/lib/python3.8/site-packages/sklearn/utils/validation.py in check_array(array, accept_sparse, accept_large_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, ensure_min_samples, ensure_min_features, estimator)
596 array = array.astype(dtype, casting="unsafe", copy=False)
597 else:
--> 598 array = np.asarray(array, order=order, dtype=dtype)
599 except ComplexWarning:
600 raise ValueError("Complex data not supported\n"

/opt/anaconda3/lib/python3.8/site-packages/numpy/core/_asarray.py in asarray(a, dtype, order)
81
82 """
---> 83 return array(a, dtype, copy=False, order=order)
84
85

/opt/anaconda3/lib/python3.8/site-packages/pandas/core/generic.py in array(self, dtype)
1779
1780 def array(self, dtype=None) -> np.ndarray:
-> 1781 return np.asarray(self._values, dtype=dtype)
1782
1783 def array_wrap(self, result, context=None):

/opt/anaconda3/lib/python3.8/site-packages/numpy/core/_asarray.py in asarray(a, dtype, order)
81
82 """
---> 83 return array(a, dtype, copy=False, order=order)
84
85

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

該当のソースコード

from sklearn.tree import DecisionTreeClassifier as DT
tree = DT(max_depth =2, random_state=0)
tree.fit(train_X, train_y)

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

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

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

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

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

toast-uz

2021/04/10 22:43

train_Xに文字列が含まれている、ということでしょうか?「機械学習 前処理 文字列」などでググってみてください。
kato9090

2021/04/11 11:13

train_Xのjobにretiredはあります。
toast-uz

2021/04/11 11:20 編集

train_Xに文字列が含まれていると理解しました。ほとんどの機械学習アルゴリズムには文字データは入れられませんので、「機械学習 前処理 文字列」などでググって、数値に変換する方法を調べてください。
guest

回答2

0

自己解決

df = pd.get_dummies(df)でダミー変数化できました。重要度表示まで行えて、イメージ説明ご指摘ありがとうございます。

投稿2021/04/11 13:31

kato9090

総合スコア0

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

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

0

こちらのエラーが出ている原因はコメント欄の中にございますように、機械学習のモデルには文字列を入力できないという問題があります。
そこで、文字列と対応した番号付を行えば、学習することができると考えられます。
例)
jobのコラムでは、
blue-coller -> 0
entrepreneur -> 1
management -> 2
retired -> 3
...

のような感じです。
この、データはcsvファイルであると思いますので、pandasを用いれば変換することができます。
pd.get_dummies(df)
を用いれば変換できます(ドキュメント)。

追記

pd.get_dummiesはラベルエンコーディングの後にone-hotに変更します。
そのため、
a,b,c,dなどのカテゴリがある場合、
a->0,b->1,c->2,d->3
などと番号付を行います。
その後に

a-> [1,0,0,0] b-> [0,1,0,0] c-> [0,0,1,0] d-> [0,0,0,1]

などのようにone-hotのベクトルに変更する処理を行います。
-> 追記終わり

これは、データ型dtypeがobject(おもに文字列)またはcategoryである列がすべてダミー変数化されます。
これを用いることで機械学習のモデル(sklearnの決定木でしょうか?)に入力することができるかと思います。

また、質問する際にコードやエラーの部分は、バッククオート(```)を3つつけたもので囲むと良いかと思います。
詳しい書き方を参照していただけたらと思います。

投稿2021/04/11 12:28

編集2021/04/11 12:57
BoKuToTuZenU

総合スコア51

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

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

bsdfan

2021/04/11 12:45

label encode(文字列と対応した番号付)とone hot encode(ダミー変数化)の話が混ざっているので、ちゃんとわけて書いた方がいいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問