scikit-learn学习笔记(三)Generalized Linear Models ( 广义线性模型 )

Generalized Linear Models ( 广义线性模型 )

以下是一组用于回归的方法,其中目标值预期是输入变量的线性组合。在数学概念中,如果  是预测值。

在整个模块中,我们指定向量  as coef_ 和  as  intercept_

要使用广义线性回归执行分类,请参阅 Logistic 回归。

Ordinary Least Squares ( 普通最小二乘法 )

LinearRegression 线性回归拟合具有系数  的线性模型,以最小化数据集中observed responses (  观察到的响应 )之间的残差平方和responses predicted by the linear approximation ( 通过线性近似预测的响应 ):

scikit-learn学习笔记(三)Generalized Linear Models ( 广义线性模型 )_第1张图片

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()

Ordinary Least Squares Complexity ( 普通最小二乘法复杂度 )

该方法使用 X singular value decomposition ( 奇异值分解 ) 来计算最小二乘解。如果Xsize(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

你可能感兴趣的:(scikit-learn学习笔记(三)Generalized Linear Models ( 广义线性模型 ))