X 有 1 个特征,但 LinearRegression 期望 5 个特征作为输入

问题描述 投票:0回答:1
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import sklearn.linear_model

dados = pd.read_csv("dados.csv", thousands=',', sep = ";", header = 0, encoding='latin-1')

dados.drop('pais', axis = 1, inplace=True)

df = dados.to_numpy()
g = [df[:,1]]
h = [df[:,0]]

#plt.scatter(x,y, color = 'blue')
plt.scatter(g,h, color = 'blue')

model=sklearn.linear_model.LinearRegression()
model.fit(g,h)

G_new=[[22500]]
print(model.predict(G_new))

X 有 1 个特征,但 LinearRegression 期望 5 个特征作为输入。

如何解决这个问题?

python pandas machine-learning scikit-learn linear-regression
1个回答
0
投票

X
不需要 5 个特征——1 个特征或 100,000 个特征就可以了——但它确实需要是一个 2D 数组。您正在传递一个一维数组(好吧,一个 Pandas 系列,但它相当于同一件事)。

这是我如何定义

X
y
(您称之为
g
h
):

X = [df[:,1]].values.reshape(-1, 1)
y = [df[:,0]].values

reshape
方法将一维数组转换为二维数组(如果你愿意,可以称为“列向量”);如果您选择多于 1 列,则不需要此重塑。

我使用

.values
将它们转换为 NumPy 数组,因为我更喜欢使用 NumPy 来传递
sklearn
数据。 Pandas 非常适合数据整理,但一旦我为 ML 任务制作了
X
y
,我就会转向 NumPy。个人喜好。

顺便说一句,人们使用大写的

X
来表示它应该是一个矩阵,即2D。这是一个数学约定。

© www.soinside.com 2019 - 2024. All rights reserved.