以下是一组用于回归的方法,其中目标值预期是输入变量的线性组合。在数学概念中,如果 是预测值。
在整个模块中,我们指定向量 as coef_ 和 as intercept_ 。
要使用广义线性回归执行分类,请参阅 Logistic 回归。
LinearRegression 线性回归拟合具有系数 的线性模型,以最小化数据集中observed responses ( 观察到的响应 )之间的残差平方和responses predicted by the linear approximation ( 通过线性近似预测的响应 ):
LinearRegression ( 线性回归 ) 将采用其拟合方法数组 X , y 并将其线性模型的系数 存储在其coef_ 成员中:
>>> from sklearn
import
linear_model
>>> reg = linear_model.LinearRegression()
>>> reg.fit ([[0, 0], [1, 1], [2, 2]], [0, 1, 2])
LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)
>>> reg.coef_
array([ 0.5, 0.5])
|
然而,普通最小二乘的系数估计依赖于模型项的独立性。当术语相关并且设计矩阵 的列具有近似的线性相关性时,设计矩阵变得接近于单数,并且因此最小二乘估计对观察到的响应中的随机误差变得高度敏感,产生大的方差。例如,当没有实验设计收集数据时,可能会出现这种多重共线性的情况。
线性模型例子:
import matplotlib.pyplot as plt import numpy as np from sklearn import datasets, linear_model # Load the diabetes dataset diabetes = datasets.load_diabetes() # Use only one feature diabetes_X = diabetes.data[:, np.newaxis, 2] # Split the data into training/testing sets diabetes_X_train = diabetes_X[:-20] diabetes_X_test = diabetes_X[-20:] # Split the targets into training/testing sets diabetes_y_train = diabetes.target[:-20] diabetes_y_test = diabetes.target[-20:] # Create linear regression object regr = linear_model.LinearRegression() # Train the model using the training sets regr.fit(diabetes_X_train, diabetes_y_train) # The coefficients print('Coefficients: \n', regr.coef_) # The mean squared error print("Mean squared error: %.2f" % np.mean((regr.predict(diabetes_X_test) - diabetes_y_test) ** 2)) # Explained variance score: 1 is perfect prediction print('Variance score: %.2f' % regr.score(diabetes_X_test, diabetes_y_test)) # Plot outputs plt.scatter(diabetes_X_test, diabetes_y_test, color='black') plt.plot(diabetes_X_test, regr.predict(diabetes_X_test), color='blue', linewidth=3) plt.xticks(()) plt.yticks(()) plt.show()
该方法使用 X 的 singular value decomposition ( 奇异值分解 ) 来计算最小二乘解。如果X 是size(n, p) 的矩阵,则该方法的成本为 ,假设。
自己写的一个例子:
1. 数据格式
x,y
1,2
2,4
3,6
4,9
5,10
6,12
7,15
8,16
9,18
10,19
12,23
13,26
14,28
15,31
20,40
21,50
2.代码
import matplotlib.pyplot as plt
import pandas as pd
from sklearn import linear_model
data = pd.read_csv('F:\\tempdata\\python\ml\\linear.csv')
print data.describe()
X_train = data['x'].values.reshape(-1, 1)
print X_train
Y_train = data['y']
print '***************'
regr = linear_model.LinearRegression()
regr.fit(X_train, Y_train)
print '***************'
print regr.coef_
print regr.intercept_
plt.scatter(X_train, Y_train, color='black')
diabetes_X_test = [[2],[5],[10]]
print diabetes_X_test
diabetes_y_test = regr.predict(diabetes_X_test)
print regr.score(diabetes_X_test, diabetes_y_test)
plt.plot(diabetes_X_test, regr.predict(diabetes_X_test), color='blue',linewidth=3)
plt.xticks(())
plt.yticks(())
plt.show()
3.结果
x y
count 19.000000 19.000000
mean 13.421053 28.157895
std 11.211679 24.356754
min 1.000000 2.000000
25% 5.500000 11.000000
50% 10.000000 19.000000
75% 17.500000 35.500000
max 40.000000 84.000000
[[ 1]
[ 2]
[ 3]
...,
[30]
[35]
[40]]
***************
***************
[ 2.16417772]
-0.8876482903
[[2], [5], [10]]
1.0