如何在 sklearn 中将 LinearRegression 与分类变量一起使用
How use LinearRegression with categorical variables in sklearn
我正在尝试执行一些速度比较测试 Python vs R 并努力解决问题 - sklearn 下的线性回归与分类变量。
代码 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
代码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])
但这对我不起作用
return X.astype(np.float32 if X.dtype == np.int32 else np.float64)
ValueError: could not convert string to float: 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() argument must be a string or a number
我不明白 Python 应该如何解决这个问题...
我必须在使用 fit
之前进行一些编码。
有几个类可以使用:
LabelEncoder : turn your string into incremental value
OneHotEncoder : use One-of-K algorithm to transform your String into integer
我想要一个可扩展的解决方案,但没有得到任何答案。我选择了将所有字符串二值化的 OneHotEncoder。它非常有效,但是如果你有很多不同的字符串,矩阵会增长得非常快并且需要内存。
我正在尝试执行一些速度比较测试 Python vs R 并努力解决问题 - sklearn 下的线性回归与分类变量。
代码 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
代码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])
但这对我不起作用
return X.astype(np.float32 if X.dtype == np.int32 else np.float64) ValueError: could not convert string to float: 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() argument must be a string or a number
我不明白 Python 应该如何解决这个问题...
我必须在使用 fit
之前进行一些编码。
有几个类可以使用:
LabelEncoder : turn your string into incremental value
OneHotEncoder : use One-of-K algorithm to transform your String into integer
我想要一个可扩展的解决方案,但没有得到任何答案。我选择了将所有字符串二值化的 OneHotEncoder。它非常有效,但是如果你有很多不同的字符串,矩阵会增长得非常快并且需要内存。