Python 机器学习库 --- sklearn --- 线性模型

前言

额,这里不支持latex语法。就截图了。。。

下面介绍的方法均是用于求解回归问题,其目标值预计是输入一个变量的一个线性组合,用数学语言表示的: \hat{y}是预测值,则有

                            \hat{y}(\omega + x) = \omega_{0} + \omega_{1}x_{1} + ...+\omega_{p}x_{p}

在这里称向量\omega=(\omega{1}, ... ,\omega{p})为 coef \omega{0}称为intercept_

普通最小二乘法

线性回归中使用系数\omega=(\omega{1}, ..., \omega{p})拟合一个线性模型,拟合的目标是要将线性逼近预测值X_{\omega} 和数据集中观察到的值y两者之差的平方和尽量降到最小,写成数学表达式为:


\underset{\omega}{min}||X_{\omega}-y||_{2}^{2}

线性回归中的fit方法接受数组X和y作为输入,将线性模型的系数\omega存在成员变量coef_中:

>>> from sklearn import linear_model                        #导入线性模型
>>> reg = linear_model.LinearRegression()                    #reg为线性回归
>>> print reg.fit ([[0, 0], [1, 1], [2, 2]], [0, 1, 2])        #对输入输出进行拟合
LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)
#copy_X: 是否备份     fit_intercept: 是否保存截距      n_jobs: 任务数量   normalize: 是否标准化
>>> print reg.coef_                                            #系数矩阵(模型的权重)
array([0.5, 0.5])
>>> print reg.intercept_                                    #训练后模型截距
1.1102230246251565e-16
>>> print reg.predict([[2, 5]])                                #训练后模型预测
array([3.5])
>>> print reg.normalize                                        #训练是否标准化
False
>>> print reg.get_params                                    #获取模型训练前设置的参数
<bound method LinearRegression.get_params of LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)>

普通二乘法的系数预测取决于模型中各个项的独立性,假设各项相关,矩阵X的列总体呈现出线性相关,那么X就会很接近奇异矩阵,其结果就是经过最小二乘得到的预测值会对原始数据中的随机误差高度敏感,从而每次预测都会产生比较大的方差,这种情况称为重共线性,例如,在数据未经实验设计就进行收集时就会发生重共线性。

还有一个线性回归的例子

import matplotlib.pyplot as plt
import numpy as np
from sklearn import datasets, linear_model

# 读取自带的diabete数据集
diabetes = datasets.load_diabetes()


# 使用其中的一个feature
diabetes_X = diabetes.data[:, np.newaxis, 2]

# 将数据集分割成training set和test set
diabetes_X_train = diabetes_X[:-20]
diabetes_X_test = diabetes_X[-20:]

# 将目标(y值)分割成training set和test set
diabetes_y_train = diabetes.target[:-20]
diabetes_y_test = diabetes.target[-20:]

# 使用线性回归
regr = linear_model.LinearRegression()

# 进行training set和test set的fit,即是训练的过程
regr.fit(diabetes_X_train, diabetes_y_train)

# 打印出相关系数和截距等信息
print('Coefficients: \n', regr.coef_)
# The mean square error
print("Residual sum of squares: %.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))

# 使用pyplot画图
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的奇异值分解来求解最小二乘 如X是n*p矩阵,则算法复杂度为O(np^{2}){\ge}p,假设n .

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Echo is learning

Gradient Descent

1313
来自专栏技术小站

吴恩达深度学习笔记 2.6~2.9 logistic中的梯度下降

之前我们已经了解了Coss Function的定义,它是一个convex,所以我们能找到它的全局最优解,我们可以先可以先随便选取一组w,b,求得刚开始J(w,b...

952
来自专栏人工智能LeadAI

Tensorflow实践:用神经网络训练分类器

任务: 使用tensorflow训练一个神经网络作为分类器,分类的数据点如下: ? 螺旋形数据点 原理 数据点一共有三个类别,而且是螺旋形交织在一起,显然是线性...

3803
来自专栏机器学习与自然语言处理

信息量,熵,交叉熵,相对熵与代价函数

本文将介绍信息量,熵,交叉熵,相对熵的定义,以及它们与机器学习算法中代价函数的定义的联系。 1. 信息量 信息的量化计算: ? 解释如下: 信息量的大小应该可...

2729
来自专栏ATYUN订阅号

Python中的白噪声时间训练

白噪声是时间序列预测中的一个重要概念。如果一个时间序列是白噪声,它是一个随机数序列,不能预测。如果预测误差不是白噪声,它暗示了预测模型仍有改进空间。 在本教程中...

5336
来自专栏深度学习与计算机视觉

如何理解卷积神经网络中的1*1卷积

我们都知道,卷积核的作用在于特征的抽取,越是大的卷积核尺寸就意味着更大的感受野,当然随之而来的是更多的参数。早在1998年,LeCun大神发布的LetNet-5...

18910
来自专栏Brian

深度学习笔记-神经网络基础

---- Binary Classification logistic是一个用于二元分类的算法,所谓二元分类就是该预测结果只有两种类别。比如:预测图片中的是不是...

3529
来自专栏有趣的Python

17- OpenCV+TensorFlow 入门人工智能图像处理-KNN最近邻域识别手写数字

1485
来自专栏Brian

机器学习常用算法-线性回归算法

1824
来自专栏漫漫深度学习路

神经网络如何防止过拟合(总结)

如何防止神经网络过拟合 获取更多的数据 选择正确的模型 将多个模型平均 贝叶斯方法 如何选择正确的模型 正则项 L1 L2 early stoping 输入加噪...

1866

扫码关注云+社区