我有一个数据集,其中包含2010年至2023年的板球比赛数据。我附上了数据样本以供参考:
Team_1 | Team_2 | 地面 | 比赛日期 |
---|---|---|---|
孟加拉国 | 斯里兰卡 | 米尔普尔 | 2010-01-04 |
印度 | 澳大利亚 | 埃德巴斯顿 | 2010-08-15 |
南非 | 英格兰 | 巴巴多斯 | 2016-07-03 |
印度 | 英格兰 | 领主们 | 2015-06-10 |
我正在尝试创建逻辑回归模型,但收到此错误消息:
#Create regression model
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder
trf = ColumnTransformer([('trf', OneHotEncoder(sparse= False, drop= 'first'),['Team_1','Team_2','Ground'])], remainder = 'passthrough')
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import Pipeline
pipe = Pipeline(steps=[('step1',trf),('step2', LogisticRegression(solver = 'liblinear'))])
pipe.fit(X_train, Y_train)`
错误信息:
ValueError: could not convert string to float: 'India'
我尝试对 Team_1、Team_2 和 Ground 列进行热编码以在逻辑回归中使用
让我们分解一下解决此问题的步骤:
确保正确的数据拆分:在应用转换之前,请确保已将数据拆分为训练集和测试集(
X_train
、X_test
、Y_train
、Y_test
)。
ColumnTransformer 和 OneHotEncoder:您将
ColumnTransformer
与 OneHotEncoder
一起使用,这是正确的。确保您尝试转换的列实际存在于 X_train
中。
拟合和变换:当您使用
pipe.fit(X_train, Y_train)
时,它将首先应用管道中指定的变换,然后拟合逻辑回归模型。
这里有更详细的方法:
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import Pipeline
# Sample data
data = {
'Team_1': ['Bangladesh', 'India', 'Southafrica', 'India'],
'Team_2': ['Srilanka', 'Australia', 'England', 'England'],
'Ground': ['Mirpur', 'Edgbaston', 'Barbados', 'Lords'],
'Matchdate': ['2010-01-04', '2010-08-15', '2016-07-03', '2015-06-10']
}
df = pd.DataFrame(data)
# Assuming you have a target column named 'target'
X = df.drop(columns=['Matchdate']) # Dropping Matchdate for simplicity
y = df['Matchdate'] # This is just a placeholder, replace with your actual target column
X_train, X_test, Y_train, Y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Create regression model
trf = ColumnTransformer([('trf', OneHotEncoder(sparse=False, drop='first'), ['Team_1', 'Team_2', 'Ground'])], remainder='passthrough')
pipe = Pipeline(steps=[('step1', trf), ('step2', LogisticRegression(solver='liblinear'))])
pipe.fit(X_train, Y_train)
注:
X_train
和 Y_train
已正确定义并具有预期数据。