- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
下面是我的代码。
我知道为什么在转换过程中会发生错误。这是因为拟合和变换期间特征列表不匹配。我该如何解决这个问题?我如何才能为所有其余功能获得 0?
在此之后,我想用它来部分拟合 SGD 分类器。
Jupyter QtConsole 4.3.1
Python 3.6.2 |Anaconda custom (64-bit)| (default, Sep 21 2017, 18:29:43)
Type 'copyright', 'credits' or 'license' for more information
IPython 6.1.0 -- An enhanced Interactive Python. Type '?' for help.
import pandas as pd
from sklearn.preprocessing import OneHotEncoder
input_df = pd.DataFrame(dict(fruit=['Apple', 'Orange', 'Pine'],
color=['Red', 'Orange','Green'],
is_sweet = [0,0,1],
country=['USA','India','Asia']))
input_df
Out[1]:
color country fruit is_sweet
0 Red USA Apple 0
1 Orange India Orange 0
2 Green Asia Pine 1
filtered_df = input_df.apply(pd.to_numeric, errors='ignore')
filtered_df.info()
# apply one hot encode
refreshed_df = pd.get_dummies(filtered_df)
refreshed_df
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3 entries, 0 to 2
Data columns (total 4 columns):
color 3 non-null object
country 3 non-null object
fruit 3 non-null object
is_sweet 3 non-null int64
dtypes: int64(1), object(3)
memory usage: 176.0+ bytes
Out[2]:
is_sweet color_Green color_Orange color_Red country_Asia \
0 0 0 0 1 0
1 0 0 1 0 0
2 1 1 0 0 1
country_India country_USA fruit_Apple fruit_Orange fruit_Pine
0 0 1 1 0 0
1 1 0 0 1 0
2 0 0 0 0 1
enc = OneHotEncoder()
enc.fit(refreshed_df)
Out[3]:
OneHotEncoder(categorical_features='all', dtype=<class 'numpy.float64'>,
handle_unknown='error', n_values='auto', sparse=True)
new_df = pd.DataFrame(dict(fruit=['Apple'],
color=['Red'],
is_sweet = [0],
country=['USA']))
new_df
Out[4]:
color country fruit is_sweet
0 Red USA Apple 0
filtered_df1 = new_df.apply(pd.to_numeric, errors='ignore')
filtered_df1.info()
# apply one hot encode
refreshed_df1 = pd.get_dummies(filtered_df1)
refreshed_df1
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1 entries, 0 to 0
Data columns (total 4 columns):
color 1 non-null object
country 1 non-null object
fruit 1 non-null object
is_sweet 1 non-null int64
dtypes: int64(1), object(3)
memory usage: 112.0+ bytes
Out[5]:
is_sweet color_Red country_USA fruit_Apple
0 0 1 1 1
enc.transform(refreshed_df1)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-6-33a6a884ba3f> in <module>()
----> 1 enc.transform(refreshed_df1)
~/anaconda3/lib/python3.6/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
~/anaconda3/lib/python3.6/site-packages/sklearn/preprocessing/data.py in _transform_selected(X, transform, selected, copy)
1810
1811 if isinstance(selected, six.string_types) and selected == "all":
-> 1812 return transform(X)
1813
1814 if len(selected) == 0:
~/anaconda3/lib/python3.6/site-packages/sklearn/preprocessing/data.py in _transform(self, X)
2030 raise ValueError("X has different shape than during fitting."
2031 " Expected %d, got %d."
-> 2032 % (indices.shape[0] - 1, n_features))
2033
2034 # We use only those categorical features of X that are known using fit.
ValueError: X has different shape than during fitting. Expected 10, got 4.
最佳答案
您需要 LabelEncoder 而不是使用 pd.get_dummies()
+ OneHotEncoder,它可以存储原始值,然后在新数据上使用它们。
像下面这样更改代码将为您提供所需的结果。
import pandas as pd
from sklearn.preprocessing import OneHotEncoder, LabelEncoder
input_df = pd.DataFrame(dict(fruit=['Apple', 'Orange', 'Pine'],
color=['Red', 'Orange','Green'],
is_sweet = [0,0,1],
country=['USA','India','Asia']))
filtered_df = input_df.apply(pd.to_numeric, errors='ignore')
# This is what you need
le_dict = {}
for col in filtered_df.columns:
le_dict[col] = LabelEncoder().fit(filtered_df[col])
filtered_df[col] = le_dict[col].transform(filtered_df[col])
enc = OneHotEncoder()
enc.fit(filtered_df)
refreshed_df = enc.transform(filtered_df).toarray()
new_df = pd.DataFrame(dict(fruit=['Apple'],
color=['Red'],
is_sweet = [0],
country=['USA']))
for col in new_df.columns:
new_df[col] = le_dict[col].transform(new_df[col])
new_refreshed_df = enc.transform(new_df).toarray()
print(filtered_df)
color country fruit is_sweet
0 2 2 0 0
1 1 1 1 0
2 0 0 2 1
print(refreshed_df)
[[ 0. 0. 1. 0. 0. 1. 1. 0. 0. 1. 0.]
[ 0. 1. 0. 0. 1. 0. 0. 1. 0. 1. 0.]
[ 1. 0. 0. 1. 0. 0. 0. 0. 1. 0. 1.]]
print(new_df)
color country fruit is_sweet
0 2 2 0 0
print(new_refreshed_df)
[[ 0. 0. 1. 0. 0. 1. 1. 0. 0. 1. 0.]]
关于python - Scikit Learn OneHotEncoder 拟合和变换错误 : ValueError: X has different shape than during fitting,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48074462/
我有格式的数据,例如 ['1', '5' '6', '5', '2'],其中每个标签可以是 0-9 之间的任意数字的字符。我的数据的性质是名义上的分类,因此它是无序的,随后,我使用 scikit On
我有一个下面列出的原始序列数据帧,我正在尝试使用单热编码,然后将它们存储在一个新的数据帧中,我正在尝试使用以下代码进行操作,但无法存储,因为我得到了之后输出如下: 代码: onehot_encoder
我有多列由分类变量组成,这些变量的形式为 0-4 之间的整数值。但是,所有列都属于同一类别。我尝试使用 scikit learn 中的 OneHotEncoder,但它不会处理列中缺失的类别,这在我在
我有一个简单的代码,可以将分类数据转换为 python 中的一种热编码: a,1,p b,3,r a,5,t 我尝试使用 python OneHotEncoder 转换它们: from sklearn
我正在尝试准备数据以输入决策树和多项朴素贝叶斯分类器。 这就是我的数据的样子(pandas 数据框) Label Feat1 Feat2 Feat3 Feat4 0 1
在 sklearn 0.22 中,categorical_features 参数将被删除,因此以下代码不再可执行: import numpy as np from sklearn.preprocess
我希望将我仅有的一个特征转换为单独的二进制特征: df["pattern_id"] Out[202]: 0 3 1 3 ... 7440 2 7441 2 7442
我正在构建一个神经网络,并且正准备对许多独立(分类)变量使用 OneHotEncoder。我想知道我是否正在使用虚拟变量正确地处理这个问题,或者因为我的所有变量都需要虚拟变量,所以可能有更好的方法。
我是Python新手。我之前只有VBA代码。最近开始使用python进行数据挖掘,但使用python时遇到了问题 我在使用 onehotencoder 正确转换我的类别功能时遇到问题,这是我的代码 f
假设我有一个包含以下列名称的 pandas 数据框: '年龄'(例如 33、26、51 等) '资历'(例如'初级'、'高级'等) “性别”(例如“男”、“女”) '薪水'(例如 32000、4000
我有以下 numpy 矩阵: M = [ ['a', 5, 0.2, ''], ['a', 2, 1.3, 'as'], ['b', 1, 2.3, 'as'], ] M =
我是 Python 中 ML 的新手,对于如何使用分类变量实现决策树感到非常困惑,因为它们由 party 和 ctree 在 中自动编码R。 我想制作一棵具有两个分类独立特征和一个依赖类的决策树。 我
我有一个问题,我试图将转换应用于我的分类特征“国家”和我的其余数字列。我怎么能做到这一点,因为我在下面尝试: preprocess = make_column_transformer( (nu
我想对数据集中 10 个特征中的 3 个分类特征进行编码。我用 preprocessing来自 sklearn.preprocessing这样做如下: from sklearn import prep
该代码包括将 OneHotEncoding 技术应用于 binetflow 文件的两个字段:Proto 和 State。我必须对 5 个文件执行此操作。我能够将下面的代码完美地应用到前两个代码中。当到
我正在阅读有关 Python 中的 One Hot Encoding 的内容,其中有一行我无法解释其含义。代码如下: ohe=preprocessing.OneHotEncoder(dtype=np.
我正在使用sklearn.preprocessing.OneHotEncoder对表单的分类数据进行编码 A=array([[1,4,1],[0,3,2]]) B=array([[1,4,7],[0,
我在使用 OneHotEncoder 仅编码分类列并忽略连续列时遇到问题。无论我在 categorical_features 中指定什么,编码器都会对所有列进行编码。例如: enc = preproc
我有一个包含调查结果的数据框,其中有选项 A-E,并且可以选择多个选项 - 选择可以是“A”或“A;C;D”等。 我将使用这些数据进行一些机器学习,并希望通过 OneHotEncoder 运行它,最终
在使用 OneHotEncoder 转换特征后,我尝试对数据集中的某些特征进行一些数据分析,输出显示特征 13 和特征 21 是最重要的特征,但我如何知道这些特征对应哪些特征到? 最佳答案 您可以使用
我是一名优秀的程序员,十分优秀!