转换数据以执行逻辑回归

问题描述 投票:0回答:1

我有一个数据集,其中包含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 列进行热编码以在逻辑回归中使用

python scikit-learn text-processing
1个回答
0
投票

让我们分解一下解决此问题的步骤:

  1. 确保正确的数据拆分:在应用转换之前,请确保已将数据拆分为训练集和测试集(

    X_train
    X_test
    Y_train
    Y_test
    )。

  2. ColumnTransformer 和 OneHotEncoder:您将

    ColumnTransformer
    OneHotEncoder
    一起使用,这是正确的。确保您尝试转换的列实际存在于
    X_train
    中。

  3. 拟合和变换:当您使用

    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
    已正确定义并具有预期数据。
  • 示例数据使用“Matchdate”作为目标变量仅用于演示目的。在现实场景中,您会有不同的逻辑回归目标变量(例如比赛结果)。
© www.soinside.com 2019 - 2024. All rights reserved.