如何在sklearn中使用LinearRegression和分类变量

时间:2015-10-05 13:44:43

标签: python r pandas machine-learning scikit-learn

我正在尝试执行一些速度比较测试Python vs R并在问题上挣扎 - 在sklearn下使用分类变量进行LinearRegression。

代码R:

# Start the clock!
ptm <- proc.time()
ptm

test_data = read.csv("clean_hold.out.csv")

# Regression Model
model_liner = lm(test_data$HH_F ~ ., data = test_data)

# Stop the clock
new_ptm <- proc.time() - ptm 

Code Python:

import pandas as pd
import time

from sklearn.linear_model import LinearRegression
from sklearn.feature_extraction import DictVectorizer

start = time.time()

test_data = pd.read_csv("./clean_hold.out.csv")

x_train = [col for col in test_data.columns[1:] if col != 'HH_F']
y_train = ['HH_F']

model_linear = LinearRegression(normalize=False)
model_linear.fit(test_data[x_train], test_data[y_train])

但它对我不起作用

  

返回X.astype(np.float32,如果X.dtype == np.int32,则为np.float64)   ValueError:无法将字符串转换为float:Bee True

我尝试了另一种方法

test_data = pd.read_csv("./clean_hold.out.csv").to_dict()
v = DictVectorizer(sparse=False)
X = v.fit_transform(test_data)

然而,我又收到了一个错误:

  

文件   &#34; C:\ Anaconda32 \ lib中\站点包\ sklearn \ feature_extraction \ dict_vectorizer.py&#34 ;,   第258行,在变换中       Xa [i,vocab [f]] = dtype(v)TypeError:float()参数必须是字符串或数字

我不明白Python应该如何解决这个问题......

数据示例: http://screencast.com/t/hYyyu7nU9hQm

1 个答案:

答案 0 :(得分:1)

在使用fit之前,我必须进行一些编码。

可以使用几个类:

LabelEncoder : turn your string into incremental value
OneHotEncoder : use One-of-K algorithm to transform your String into integer

我想要一个可扩展的解决方案,但没有得到任何答案。我选择了将所有字符串二值化的OneHotEncoder。它非常有效但是如果你有很多不同的字符串,那么矩阵会很快增长并且需要内存。