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 个特征作为输入。
如何解决这个问题?
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。这是一个数学约定。