使用sklearn和线性回归时出错:形状(1,16)和(1,1)未对齐:16(尺寸1)!=1(尺寸0)

2024-04-26 13:16:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我等着学习机器学习,无意中发现了youtube上的siraj和他的Udacity视频,我想试着收集一些东西。

参考他的视频:https://www.youtube.com/watch?v=vOppzHpvTiQ&index=1&list=PL2-dafEMk2A7YdKv4XfKpfbTH5z6rEEj3

在他的视频中,他有一个txt文件,他导入并读取,但当我试图重新创建txt文件时,无法正确读取。相反,我试图用相同的数据创建一个pandas数据框,并对其执行线性回归/预测,但随后我得到了以下错误。

找到样本数不一致的输入变量:[1,16]以及有关传递1d数组的内容,我需要重新调整它们的形状。

然后,当我试图在这篇文章之后重塑它们时:Sklearn : ValueError: Found input variables with inconsistent numbers of samples: [1, 6]

我知道这个错误。。。。

形状(1,16)和(1,1)未对齐:16(尺寸1)!=1(尺寸0)

下面是我的代码。我知道这可能是一个语法错误,我只是还不熟悉这个scrklearn,希望得到一些帮助。

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

#DF = pd.read_fwf('BrainBodyWeight.txt')
DF = pd.DataFrame()
DF['Brain'] = [3.385, .480, 1.350, 465.00,36.330, 27.660, 14.830, 1.040, 4.190, 0.425, 0.101, 0.920, 1.000, 0.005, 0.060, 3.500 ]

DF['Body'] = [44.500, 15.5, 8.1, 423, 119.5, 115, 98.2, 5.5,58, 6.40, 4, 5.7,6.6, .140,1, 10.8]

try:
    x = DF['Brain']
    y = DF['Body']

    x = x.tolist()
    y = y.tolist()

    x = np.asarray(x)
    y = np.asarray(y)


    body_reg = linear_model.LinearRegression()
    body_reg.fit(x.reshape(-1,1),y.reshape(-1,1))
    plt.scatter(x,y)
    plt.plot(x,body_reg.predict(x))
    plt.show()
except Exception as e:
    print(e)

有谁能解释为什么sklearn不喜欢我的输入????


Tags: 文件数据importtxtpandasdf视频youtube
1条回答
网友
1楼 · 发布于 2024-04-26 13:16:48

FromdocumentationLinearRegression.fit()需要具有[n_samples,n_features]形状的x数组。所以这就是为什么在调用fit之前要重新构造x数组的原因。因为如果不这样做,就会有一个(16,)形状的数组,它不满足所需的[n_samples,n_features]形状,所以不会给出n_features

x = DF['Brain']
x = x.tolist()
x = np.asarray(x)

# 16 samples, None feature
x.shape
(16,)

# 16 samples, 1 feature
x.reshape(-1,1).shape
(16,1)

同样的要求也适用于LinearRegression.predict函数(同时也适用于一致性),只需在调用predict函数时进行相同的整形即可。

plt.plot(x,body_reg.predict(x.reshape(-1,1)))

或者,您可以在调用任何函数之前重新调整x数组的形状。

对于特性引用,只需调用DF['Brain'].values,就可以轻松地获得内部numpy值数组。不需要将其强制转换为list->;numpy数组。所以你可以用这个来代替所有的转换:

x = DF['Brain'].values.reshape(1,-1)
y = DF['Body'].values.reshape(1,-1)

body_reg = linear_model.LinearRegression()
body_reg.fit(x, y)

相关问题 更多 >