Skip to main content
 首页 » 编程设计

python之有效地将数据帧作为 y 和 X 传递给 scikit-learn 拟合

2025年05月04日14小虾米

我从 read_sql_query 生成一个 pandas 数据框。它有三列,“结果、速度、权重”

我想使用 scikit-learn LinearRegression 来拟合 results = f(speed, weight)

我一直无法找到允许我将此数据帧或它的列切片传递给 LinearRegression.fit(y, X) 的正确语法。

print df['result'].shape 
print df[['speed', 'weight']].shape 
(8L,) 
(8, 2) 

但我无法将其传递给 fit

lm.fit(df['result'], df[['speed', 'weight']]) 

它抛出一个弃用警告和一个ValueError

DeprecationWarning: Passing 1d arrays as data is deprecated in 0.17 and willraise ValueError in 0.19.  
ValueError: Found arrays with inconsistent numbers of samples: [1 8] 

获取目标和特征的数据帧并将它们传递给 fit 操作的高效、简洁的方法是什么?

这就是我生成示例的方式:

import pandas as pd 
import numpy as np 
from datetime import datetime, timedelta 
 
date_today = datetime.now() 
days = pd.date_range(date_today, date_today + timedelta(7), freq='D') 
 
np.random.seed(seed=1111) 
data = np.random.randint(1, high=100, size=len(days)) 
data2 = np.random.randint(1, high=100, size=len(days)) 
data3 = np.random.randint(1, high=100, size=len(days)) 
df = pd.DataFrame({'test': days, 'result': data,'speed': data2,'weight': data3}) 
df = df.set_index('test') 
print(df) 

请您参考如下方法:

您发送的值顺序不正确。所有实现 fit() 的 scikit-learn 估算器都接受输入 X, y 而不是 y, X,就像您正在做的那样。

试试这个:

lm.fit(df[['speed', 'weight']], df['result'])