我是这个论坛的新手。我有一个小问题要了解如何计算斜率并从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)
您能让我了解我在做什么错,并建议进行哪些更改以成功计算坡度和截距吗?
我线性回归的目标是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上找到更多内容。