使用线性回归难以计算Numpy / Scypy中的斜率和截距

问题描述 投票:0回答:1

我是这个论坛的新手。我有一个小问题要了解如何计算斜率并从csv文件中的值截取。

这是我的工作代码(minquadbasso.py是程序的名称:]

import numpy as np
import matplotlib.pyplot as plt  # To visualize
import pandas as pd  # To read data
from sklearn.linear_model import LinearRegression

data = pd.read_csv('TelefonoverticaleAsseY.csv')  # load data set
X = data.iloc[:, 0].values.reshape(-1, 1)  # values converts it into a numpy array
Y = data.iloc[:, 1].values.reshape(-1, 1)  # -1 means that calculate the dimension of rows, but have 1 column

linear_regressor = LinearRegression()  # create object for the class
linear_regressor.fit(X, Y)  # perform linear regression
Y_pred = linear_regressor.predict(X) # make predictions

plt.scatter(X, Y)
plt.plot(X, Y_pred, color='black')
plt.show()

如果我使用:

from scipy.stats import linregress
linregress(X, Y)

编译器给我这个错误:

Traceback (most recent call last):
  File "minquadbasso.py", line 11, in <module>
    linregress(X, Y)
  File "/usr/local/lib/python3.7/dist-packages/scipy/stats/_stats_mstats_common.py", line 116, in linregress
    ssxm, ssxym, ssyxm, ssym = np.cov(x, y, bias=1).flat
ValueError: too many values to unpack (expected 4) 

您能让我了解我在做什么错,并建议进行哪些更改以成功计算坡度和截距吗?

python numpy scipy linear-regression
1个回答
0
投票

我线性回归的目标是np.polyfit。如果您有x数据的数组(或列表),而y数据的数组或列表,请使用

coeff = np.polyfit(x,y, deg = 1)

coeff现在是一个最小二乘系数列表以适合您的数据,其中x的度数最高。因此,对于一级拟合y = ax + b,a = coeff[0]b = coeff[1]'deg'是要适合数据的多项式的次数。要评估您的回归(预测),可以使用np.polyval

y_prediction = np.polyval(coeff, x)

如果需要拟合的协方差矩阵

coeff, cov = np.polyfit(x,y, deg = 1, cov = True)

您可以在here上找到更多内容。

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