尝试在Titanic数据集上应用OneHotEncoding。 sklearn版本为0.19.2。首先进行Labelencoded,现在尝试进行Onehot编码时,它抛出错误“无法将str转换为float:C148”
首先,对“性别”和“禁止”功能进行标签编码,此操作已成功完成。现在,当尝试进行一次热编码时,“机舱”功能中的值将引发异常,而该异常根本就不会被编码。另外,C148是几乎在数据集末尾出现的值。
#Label Encoding
encoder= LabelEncoder()
df2['Embarked']=df2['Embarked'].fillna(method='backfill')
array1= df2.values
array1[:,4]=encoder.fit_transform(array1[:,4])
array1[:,11]=encoder.fit_transform(array1[:,11])
df_encoded1= pd.DataFrame(array1)
#One hot encoding
from sklearn.preprocessing import OneHotEncoder
hotencoder= OneHotEncoder(categorical_features=[4,11])
array1= hotencoder.fit_transform(array1)
ValueError Traceback (most recent call last)
<ipython-input-45-c14deb702f63> in <module>()
----> 1 array1= hotencoder.transform(array1)
~\AppData\Local\Continuum\anaconda3\lib\site-
packages\sklearn\preprocessing\data.py in transform(self, X)
2073 """
2074 return _transform_selected(X, self._transform,
-> 2075 self.categorical_features,
copy=True)
2076
2077
~\AppData\Local\Continuum\anaconda3\lib\site-
packages\sklearn\preprocessing\data.py in _transform_selected(X, transform,
selected, copy)
1807 X : array or sparse matrix, shape=(n_samples, n_features_new)
1808 """
-> 1809 X = check_array(X, accept_sparse='csc', copy=copy,
dtype=FLOAT_DTYPES)
1810
1811 if isinstance(selected, six.string_types) and selected == "all":
~\AppData\Local\Continuum\anaconda3\lib\site-
packages\sklearn\utils\validation.py in check_array(array, accept_sparse,
dtype, order, copy, force_all_finite, ensure_2d, allow_nd,
ensure_min_samples, ensure_min_features, warn_on_dtype, estimator)
431 force_all_finite)
432 else:
--> 433 array = np.array(array, dtype=dtype, order=order,
copy=copy)
434
435 if ensure_2d:
ValueError: could not convert string to float: 'C148'
除了上述错误的解决方案之外,还请告诉我如何更新到sklearn的最新版本。我尝试使用pip install -U scikit-learn更新sklearn,但它会再次安装0.19.2版本。
答案 0 :(得分:0)
您使用的scikit包似乎是旧的。实际上,您可以将其升级到0.20.x。否则,您可以首先通过Labelencoder()方法使其工作。