gpt4 book ai didi

python - 使用 Scikit-Learn 使用分类数据制作回归模型

转载 作者:行者123 更新时间:2023-11-30 08:56:36 25 4
gpt4 key购买 nike

我有一个包含超过 10 列的 CSV 文件,其中一些列有分类数据,一些分类列只有 yesno 值,一些列有颜色(greenbluered...)并且某些列具有其他字符串值。

有没有办法制作所有列的回归模型?

我知道yesno值可以表示为1和0,但我读到用数字表示颜色名称或城市名称不好。有更好/正确的方法来做到这一点吗?

这是带有虚拟数据的简单代码:

import pandas as pd
from sklearn.linear_model import LinearRegression

df = pd.DataFrame({'par1':[1,3,5,7,9, 11,13],
'par2':[0.2, 0.4, 0.5, 0.7, 1, 1.2, 1.45],
'par3':['yes', 'no', 'no', 'yes', 'no', 'yes', 'no'],
'par4':['blue', 'red', 'red', 'blue', 'green', 'green', 'blue'],
'output':[103, 310, 522, 711, 921, 1241, 1451]})

print(df)

features = df.iloc[:,:-1]
result = df.iloc[:,-1]

reg = LinearRegression()
model = reg.fit(features, result)

prediction = model.predict([[2, 0.33, 'no', 'red']])

reg_score = reg.score(features, result)

print(prediction, reg_score)

在我使用的真实数据集中,这些字符串值对于数据集非常重要,因此我不能只删除该列

最佳答案

您通常会“one-hot encode”对变量进行分类。这也称为“adding dummy variables”。

您还需要“standardize”数值变量。

Scikit-learn 让这一切变得简单:

from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder

t = ColumnTransformer(transformers=[
('onehot', OneHotEncoder(), ['par3', 'par4']),
('scale', StandardScaler(), ['par1', 'par2'])
], remainder='passthrough') # Default is to drop untransformed columns

t.fit_transform(df)

最后,您需要以相同的方式转换输入,然后再通过模型运行它。

把它们放在一起你会得到:

import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder, StandardScaler


df = pd.DataFrame({'par1':[1,3,5,7,9, 11,13],
'par2':[0.2, 0.4, 0.5, 0.7, 1, 1.2, 1.45],
'par3':['yes', 'no', 'no', 'yes', 'no', 'yes', 'no'],
'par4':['blue', 'red', 'red', 'blue', 'green', 'green', 'blue'],
'output':[103, 310, 522, 711, 921, 1241, 1451]})

t = ColumnTransformer(transformers=[
('onehot', OneHotEncoder(), ['par3', 'par4']),
('scale', StandardScaler(), ['par1', 'par2'])
], remainder='passthrough')

# Transform the features
features = t.fit_transform(df.iloc[:,:-1])
result = df.iloc[:,-1]

# Train the linear regression model
reg = LinearRegression()
model = reg.fit(features, result)

# Generate a prediction
example = t.transform(pd.DataFrame([{
'par1': 2, 'par2': 0.33, 'par3': 'no', 'par4': 'red'
}]))
prediction = model.predict(example)
reg_score = reg.score(features, result)
print(prediction, reg_score)

关于python - 使用 Scikit-Learn 使用分类数据制作回归模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58163835/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com