假设我有以下数据
import pandas as pd
data = {
'Reference': [1, 2, 3, 4, 5],
'Brand': ['Volkswagen', 'Volvo', 'Volvo', 'Audi', 'Volkswagen'],
'Town': ['Berlin', 'Berlin', 'Stockholm', 'Munich', 'Berlin'],
'Mileage': [35000, 45000, 121000, 35000, 181000],
'Year': [2015, 2014, 2012, 2016, 2013]
}
df = pd.DataFrame(data)
在这上面,我想在“品牌”和“城镇”两列上做一次性编码,以便训练分类器(比如用Scikit学习)并预测年份。
一旦分类器被训练,我将希望根据新的输入数据预测年份(不在训练中使用),我将需要重新应用相同的热编码。例如:
new_data = {
'Reference': [6, 7],
'Brand': ['Volvo', 'Audi'],
'Town': ['Stockholm', 'Munich']
}
在这种情况下,如果知道需要对多个列进行编码,并且需要能够在以后对新数据应用相同的编码,那么对Pandas数据帧上的2列进行一次热编码的最佳方法是什么。
这是如何在SkLearn中重用LabelBinarizer进行输入预测的后续问题
您可以使用熊猫提供的get_dummies函数并转换分类值。
像这样的。。
import pandas as pd
data = {
'Reference': [1, 2, 3, 4, 5],
'Brand': ['Volkswagen', 'Volvo', 'Volvo', 'Audi', 'Volkswagen'],
'Town': ['Berlin', 'Berlin', 'Stockholm', 'Munich', 'Berlin'],
'Mileage': [35000, 45000, 121000, 35000, 181000],
'Year': [2015, 2014, 2012, 2016, 2013]
}
df = pd.DataFrame(data)
train = pd.concat([df.get(['Mileage','Reference','Year']),
pd.get_dummies(df['Brand'], prefix='Brand'),
pd.get_dummies(df['Town'], prefix='Town')],axis=1)
对于测试数据,您可以:
new_data = {
'Reference': [6, 7],
'Brand': ['Volvo', 'Audi'],
'Town': ['Stockholm', 'Munich']
}
test = pd.DataFrame(new_data)
test = pd.concat([test.get(['Reference']),
pd.get_dummies(test['Brand'], prefix='Brand'),
pd.get_dummies(test['Town'], prefix='Town')],axis=1)
# Get missing columns in the training test
missing_cols = set( train.columns ) - set( test.columns )
# Add a missing column in test set with default value equal to 0
for c in missing_cols:
test[c] = 0
# Ensure the order of column in the test set is in the same order than in train set
test = test[train.columns]
考虑以下方法。
演示:
from sklearn.preprocessing import LabelBinarizer
from collections import defaultdict
d = defaultdict(LabelBinarizer)
In [7]: cols2bnrz = ['Brand','Town']
In [8]: df[cols2bnrz].apply(lambda x: d[x.name].fit(x))
Out[8]:
Brand LabelBinarizer(neg_label=0, pos_label=1, spars...
Town LabelBinarizer(neg_label=0, pos_label=1, spars...
dtype: object
In [10]: new = pd.DataFrame({
...: 'Reference': [6, 7],
...: 'Brand': ['Volvo', 'Audi'],
...: 'Town': ['Stockholm', 'Munich']
...: })
In [11]: new
Out[11]:
Brand Reference Town
0 Volvo 6 Stockholm
1 Audi 7 Munich
In [12]: pd.DataFrame(d['Brand'].transform(new['Brand']), columns=d['Brand'].classes_)
Out[12]:
Audi Volkswagen Volvo
0 0 0 1
1 1 0 0
In [13]: pd.DataFrame(d['Town'].transform(new['Town']), columns=d['Town'].classes_)
Out[13]:
Berlin Munich Stockholm
0 0 0 1
1 0 1 0
我想用内核机对数据集进行分类。目标类有5个不同的值,我想一次性编码它。之后,我有5个目标列。我做了5次训练,每次目标列一次。现在我想分类一个新的样本。我用我得到的5个Trainig模型对样品进行了5次分类。最后,我看哪一个预测在5个预测中具有最大值,然后我根据具有最大预测的类对样本进行分类。我不确定我做的是对的。我怎样才能以正确的方式做到这一点?
我有一个熊猫数据框,它有一些行和列。每列都有一个标题。现在,只要我继续在pandas中执行数据操作,我的变量头就会被保留。但是,如果我尝试Sci kit学习库的一些数据预处理功能,我最终会丢失所有的标题,并且帧会转换为一个数字矩阵。 我理解为什么会发生这种情况,因为Scikit学习给出了一个Numpy ndarray作为输出。而Numpy ndarray只是矩阵不会有列名。 但事情是这样的。如果我
问题内容: 我有一个80%分类变量的机器学习分类问题。如果要使用一些分类器进行分类,是否必须使用一种热编码?我可以在没有编码的情况下将数据传递给分类器吗? 我正在尝试进行以下功能选择: 我读了火车文件: 我将类别特征的类型更改为“类别”: 我使用一种热编码: 问题是,尽管我使用的是坚固的机器,但第3部分经常卡住。 因此,没有一种热编码,我就无法进行任何特征选择来确定特征的重要性。 你有什么建议吗?
我有一个80%分类变量的机器学习分类问题。如果我想使用一些分类器进行分类,我必须使用一个热编码吗?我可以不编码地将数据传递给分类器吗? 我试图做以下功能选择: > 我读了火车文件: 我将分类特征的类型更改为“类别”: 我使用一个热编码: 问题是,第三部分经常卡住,尽管我使用的是一个强大的机器。 因此,没有一个热编码,我无法进行任何特征选择,以确定特征的重要性。 你推荐什么?
我有一个pandas数据帧像: 我想按第一列进行分组,并将第二列作为行中的列表:
对于一篇研究论文,我将使用套索模型进行分类和特征选择。我正准备使用一种热编码来处理分类数据,并需要找出哪些特征映射到原始分类值,以确定最终为最终模型选择了哪些特征。我在谷歌上搜索这个问题已经有一段时间了,但还没有找到答案。 scikit的一个热编码如何分配值?例如,假设某个变量的分类值为{1,2,3,4}。一个热编码是否按时间顺序将它们组织为虚拟对象(即,删除1,将第一个虚拟对象设置为值2,将第二