2017-09-07 11 views
1

sklearnからLinearRegressionを使用しようとしていますが、「文字列を浮動小数点に変換できませんでした」というメッセージが表示されます。データフレームのすべての列は浮動小数点になり、出力yも浮動小数点になります。私は他の投稿を見て、提案は私が行ったフロートに変換することです。sklearn-LinearRegression:文字列をfloatに変換できませんでした: ' - '

<class 'pandas.core.frame.DataFrame'> 
Int64Index: 789 entries, 158 to 684 
Data columns (total 8 columns): 
f1  789 non-null float64 
f2  789 non-null float64 
f3  789 non-null float64 
f4  789 non-null float64 
f5  789 non-null float64 
f6  789 non-null float64 
OFF 789 non-null uint8 
ON  789 non-null uint8 
dtypes: float64(6), uint8(2) 
memory usage: 44.7 KB 

type(y_train) 
pandas.core.series.Series 
type(y_train[0]) 
float 

from sklearn.model_selection import train_test_split 
X_train,X_test,y_train,y_test=train_test_split(X,Y,random_state=0) 
X_train.head() 
from sklearn.linear_model import LinearRegression 
linreg = LinearRegression().fit(X_train, y_train) 

私が手にエラーが助けてください

ValueError        Traceback (most recent call last) 
<ipython-input-282-c019320f8214> in <module>() 
     6 X_train.head() 
     7 from sklearn.linear_model import LinearRegression 
----> 8 linreg = LinearRegression().fit(X_train, y_train) 
510   n_jobs_ = self.n_jobs 
    511   X, y = check_X_y(X, y, accept_sparse=['csr', 'csc', 'coo'], 
--> 512       y_numeric=True, multi_output=True) 
    513 
    514   if sample_weight is not None and np.atleast_1d(sample_weight).ndim > 1: 

527   _assert_all_finite(y) 
    528  if y_numeric and y.dtype.kind == 'O': 
--> 529   y = y.astype(np.float64) 
    530 
    531  check_consistent_length(X, y) 

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

です。

+0

'X'と 'Y'は何ですか? – Quickbeam2k1

答えて

1

すぐに解決するには、pd.to_numericを使用して、データに含まれる文字列を数値に変換する必要があります。それらがコンバージョンと互換性がない場合は、NaNに縮小されます。

from sklearn.linear_model import LinearRegression 

X = X.apply(pd.to_numeric, errors='coerce') 
Y = Y.apply(pd.to_numeric, errors='coerce') 

さらに、あなたはいくつかのデフォルトでこれらの値を埋めるために選択することができます。

X.fillna(0, inplace=True) 
Y.fillna(0, inplace=True) 

があなたの問題に関連する何でもで塗りつぶし値を置き換えます。 XYから別の行を削除してデータラベルの不一致が発生する可能性があるため、これらの行を削除することはお勧めしません。

最後に

、分割して、分類器を呼び出す:

X_train, X_test, y_train, y_test = train_test_split(X, Y, random_state=0) 
clf = LinearRegression().fit(X_train, y_train) 
+0

しかし、それらが 'Nan'sになると、LinearRegression.fit()はまだエラーをスローします。 –

+0

@VivekKumar OPがそれらのNaNで何をしたいのかわかりません...おそらくそれらをドロップしますか?それらを埋める?私はさらに明確に編集します。 –

+0

Aah ok。これにより、データOPが実際に良好かどうかを検証します。感謝 –

関連する問題