Python 3.x 为什么.fit()需要2D数组作为第一个参数?

Python 3.x 为什么.fit()需要2D数组作为第一个参数?,python-3.x,machine-learning,scikit-learn,Python 3.x,Machine Learning,Scikit Learn,错误消息: ValueError:预期为2D数组,但实际为1D数组: 阵列=[2600 3000 3200 3600 4000]。 使用数组重塑数据。如果数据具有单个特征或数组,则重塑(-1,1)。如果数据包含单个样本,则重塑(1,-1) 如果我将其写为: import pandas as pd import numpy as np from sklearn import linear_model import matplotlib.pyplot as plt df = pd.read_csv

错误消息:

ValueError:预期为2D数组,但实际为1D数组: 阵列=[2600 3000 3200 3600 4000]。 使用数组重塑数据。如果数据具有单个特征或数组,则重塑(-1,1)。如果数据包含单个样本,则重塑(1,-1)

如果我将其写为:

import pandas as pd
import numpy as np
from sklearn import linear_model
import matplotlib.pyplot as plt

df = pd.read_csv('homeprices.csv')

plt.xlabel('area')
plt.ylabel('price')
plt.scatter(df.area,df.price,color='red',marker='.')


reg = linear_model.LinearRegression()
reg.fit(df.area,df.price)
我想知道它背后的原因,因为第二个参数作为df.price传递

我的csv文件:

  • 面积、价格
  • 2600550000
  • 3000565000
  • 320061000
  • 3600680000
  • 4000725000

都是关于输入形状的,错误是因为它的形状是(N,)而正确的形状应该是(N,1)。这就是为什么错误消息建议您进行重塑。

变量x应声明为

形状的X{类数组,稀疏矩阵}(n_样本,n_特征)

当您声明:

  • x=df.area
    x=df['area']
    x
    将成为
    系列
    类型,大小为
    (n,)
    。大小应为
    (n,z)
    ,其中
    z
    可以是任何正整数

  • x=df[['area']]
    x
    将变为
    DataFrame
    类型,其大小为
    (5,1)
    ,使
    x
    成为可接受的输入

  • y=df.price
    y
    将成为
    系列
    类型,其大小
    (5,)
    为可接受输入

y:形状的数组状(n_个样本,)

但如果我是你,我宣布
x
y
为:

x=[[i]表示df['area']]中的i
y=[i代表df中的i['price']]

这使得
x
y
都成为
列表
结构,并将大小设置为
(5,1)
,因此将来如果要在任何ML库中运行(tensorflow、pytorch、keras等)您不会遇到任何困难。

请注意,您在上一段中对外部资源的请求在此明确脱离主题(已编辑,因为这将使您的问题符合脱离主题的条件)。
reg.fit(df[['area']],df.price)