pd.get_dummies允许将分类变量转换为虚拟变量.除了重建分类变量是微不足道的事实之外,还有一种首选/快速的方法吗?
我正在编写一个使用线性回归的应用程序。就我而言sklearn.linear_model.Ridge。我难以将自己喜欢的数据点带到的正确形状中Ridge。我简要描述了我的两个应用程序以及问题如何出现:
第一次应用:
我的数据点每个只有1个功能,都是字符串,因此我正在使用One-Hot-Encoding来将它们与结合使用Ridge。之后,每个数据点(X_hotEncoded)具有9个功能:
import pandas as pd
X_hotEncoded = pd.get_dummies(X)
Run Code Online (Sandbox Code Playgroud)
安装后Ridge,以X_hotEncoded和标签y我保存训练的模型:
from sklearn.externals import joblib
joblib.dump(ridge, "ridge.pkl")
Run Code Online (Sandbox Code Playgroud)
第二次应用:
现在,我已经在磁盘上保存了训练有素的模型,我希望在第二个应用程序中检索它,并y仅针对一个数据点进行预测(标签)。那就是我遇到上述问题的地方:
# X = one datapoint I like to predict y for
ridge= joblib.load("ridge.pkl")
X_hotEncoded = pd.get_dummies(X)
ridge.predict(X_hotEncoded) # this should give me the prediction
Run Code Online (Sandbox Code Playgroud)
这在代码的最后一行给了我以下错误:
ValueError: shapes (1,1) and (9,) not aligned: 1 (dim 1) != 9 (dim 0)
Ridge由于使用了我在所有数据点上使用的“一键编码”功能,因此接受了9种功能的培训。现在,当我只想预测一个数据点(仅具有1个功能)时,我很难将这个数据点设置为正确的形状以使Ridge能够处理它。一键编码仅对一个数据点产生影响,而仅具有一项功能。
有人知道这个问题的解决方案吗?
可能的解决方案是将列名称写入第一个应用程序中的磁盘,然后在第二个应用程序中检索它,然后在该处重建数据点。可以按如下所示的方式检索单热编码数组的列名:反转熊猫中的“单热”编码
python machine-learning python-3.x scikit-learn one-hot-encoding
我有一个pandas数据帧如下:
df=pd.DataFrame({'a':['red','yellow','blue'], 'b':[0,0,1], 'c':[0,1,0], 'd':[1,0,0]})
df
Run Code Online (Sandbox Code Playgroud)
看起来像
a b c d
0 red 0 0 1
1 yellow 0 1 0
2 blue 1 0 0
Run Code Online (Sandbox Code Playgroud)
我想将它转换为字典,以便我得到:
red d
yellow c
blue b
Run Code Online (Sandbox Code Playgroud)
如果数据集非常大,请避免使用任何迭代方法.我还没有找到解决方案.任何帮助表示赞赏.
我有以下的一般布局的数据帧:
id,ind_1,ind_2_ind_3
1,0,1,0
1,1,0,0
2,0,1,0
2,0,0,1
3,0,0,1
3,1,0,0
Run Code Online (Sandbox Code Playgroud)
我想添加一个额外的列,其值是原始指标名称时,他们是“1”,这应该是这样的:
id,ind_1,ind_2,ind_3,ind_all
1,0,1,0,ind_2
1,1,0,0,ind_1
2,0,1,0,ind_2
2,0,0,1,ind_3
3,0,0,1,ind_3
3,1,0,0,ind_1
Run Code Online (Sandbox Code Playgroud)
欢迎任何提示!