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

我在进行Python与R的速度比较测试时遇到了问题,具体是关于sklearn中使用分类变量进行LinearRegression的操作。

R语言代码:

# 启动计时器!ptm <- proc.time()ptmtest_data = read.csv("clean_hold.out.csv")# 回归模型model_liner = lm(test_data$HH_F ~ ., data = test_data)# 停止计时器new_ptm <- proc.time() - ptm 

Python代码:

import pandas as pdimport timefrom sklearn.linear_model import LinearRegressionfrom sklearn.feature_extraction import DictVectorizerstart = 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])

但对我来说这是行不通的

return X.astype(np.float32 if X.dtype == np.int32 else np.float64) ValueError: 无法将字符串转换为浮点数: Bee True

我尝试了另一种方法

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

然而,我遇到了另一个错误:

File “C:\Anaconda32\lib\site-packages\sklearn\feature_extraction\dict_vectorizer.py”, line 258, in transform Xa[i, vocab[f]] = dtype(v) TypeError: float() 参数必须是字符串或数字

我不明白Python应该如何解决这些问题…

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


回答:

在使用fit之前,我需要进行一些编码操作。

可以使用以下几种类:

LabelEncoder : 将你的字符串转换为递增值OneHotEncoder : 使用One-of-K算法将你的字符串转换为整数

我希望有一个可扩展的解决方案,但没有得到任何答案。我选择了OneHotEncoder,它将所有字符串二值化。这种方法相当有效,但如果你有很多不同的字符串,矩阵会迅速增长,需要更多的内存。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注