【问题标题】:One Hot Encoding for States using sklearn使用 sklearn 的状态的一种热编码
【发布时间】:2017-11-05 19:25:40
【问题描述】:

我正在尝试使用 sklearn 热编码器对状态执行热编码。这是我的熊猫数据框:

State
0   FL
1   CA
2   MD
3   NY
4   NY
5   NY
6   NY

我写道:

from sklearn.preprocessing import OneHotEncoder

enc=OneHotEncoder(sparse=False)
enc.fit(data)

这是错误:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-78-a0b336acd757> in <module>()
----> 1 enc.fit(data)

/anaconda/envs/env3_insight/lib/python3.6/site-packages/sklearn/preprocessing/data.py in fit(self, X, y)
   1842         self
   1843         """
-> 1844         self.fit_transform(X)
   1845         return self
   1846 

/anaconda/envs/env3_insight/lib/python3.6/site-packages/sklearn/preprocessing/data.py in fit_transform(self, X, y)
   1900         """
   1901         return _transform_selected(X, self._fit_transform,
-> 1902                                    self.categorical_features, copy=True)
   1903 
   1904     def _transform(self, X):

/anaconda/envs/env3_insight/lib/python3.6/site-packages/sklearn/preprocessing/data.py in _transform_selected(X, transform, selected, copy)
   1695     X : array or sparse matrix, shape=(n_samples, n_features_new)
   1696     """
-> 1697     X = check_array(X, accept_sparse='csc', copy=copy, dtype=FLOAT_DTYPES)
   1698 
   1699     if isinstance(selected, six.string_types) and selected == "all":

/anaconda/envs/env3_insight/lib/python3.6/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)
    380                                       force_all_finite)
    381     else:
--> 382         array = np.array(array, dtype=dtype, order=order, copy=copy)
    383 
    384         if ensure_2d:

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

我不明白。我认为进行热编码的全部意义在于将分类信息(通常是字符串)信息转换为数字……那为什么说我不能将字符串转换为浮点数呢?

【问题讨论】:

  • 你需要先使用LabelEncoder。
  • OneHotEncoder 和 documentation suggests 一样,只接受数字数据。首先为您的数据分配一些数值,例如 1 代表“FL”,2 代表“CA”等等……然后对它们使用 OneHotEncoding。要将字符串转换为数字,请按照@ayhan 的建议使用 LabelEncoder。

标签: python pandas scikit-learn one-hot-encoding


【解决方案1】:

Pandas 数据帧有一个内置选项来创建一个热编码,使用get_dummies method

在你的例子中:

data = pd.DataFrame(['FL','CA','MD','NY','NY','NY','NY'], columns= ['State'])

pd.get_dummies(data.State)

将导致:

加利福尼亚州佛罗里达州医学博士纽约

0 0 1 0 0

1 1 0 0 0

2 0 0 1 0

3 0 0 0 1

4 0 0 0 1

5 0 0 0 1

6 0 0 0 1

【讨论】:

    猜你喜欢
    • 2017-06-04
    • 2021-07-12
    • 1970-01-01
    • 1970-01-01
    • 2016-11-30
    • 2016-03-19
    • 2018-04-21
    • 2021-12-01
    • 2018-12-17
    相关资源
    最近更新 更多