【发布时间】:2014-06-23 05:35:19
【问题描述】:
我主要从事 R 领域的统计建模/机器学习工作,并希望提高我的 Python 技能。我想知道在 python 中创建分类交互(任意程度)的设计矩阵的最佳方法。
一个玩具例子:
import pandas as pd
from urllib import urlopen
page = urlopen("http://www.shatterline.com/MachineLearning/data/tennis_anyone.csv")
df = pd.read_csv(page)
df.head(n=5)
假设我们要在 Outlook、Temp 和 Humidity 之间创建交互。有没有一种有效的方法来做到这一点?我可以在熊猫中手动做这样的事情:
OutTempFact=pd.Series(pd.factorize(pd.lib.fast_zip([df.Outlook.values, df.Temperature.values]))[0],name='OutTemp')
OutHumFact=pd.Series(pd.factorize(pd.lib.fast_zip([df.Outlook.values, df.Humidity.values]))[0],name='OutHum')
TempHumFact=pd.Series(pd.factorize(pd.lib.fast_zip([df.Temperature.values, df.Humidity.values]))[0],name='TempHum')
IntFacts=pd.concat([OutTempFact,OutHumFact,TempHumFact],axis=1)
IntFacts.head(n=5)
然后我可以将其传递给 scikit-learn one-hot 编码器,但可能有一种更好、更少手动的方法来创建分类变量之间的交互,而无需逐步完成每个组合。
import sklearn as sk
enc = sk.preprocessing.OneHotEncoder()
IntFacts_OH=enc.fit_transform(IntFacts)
IntFacts_OH.todense()
【问题讨论】:
标签: python pandas scikit-learn