如何在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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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