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 条评论
登录 后参与评论

相关文章

来自专栏LhWorld哥陪你聊算法

【机器学习】--层次聚类从初识到应用

聚类就是对大量未知标注的数据集,按数据的内在相似性将数据集划分为多个类别,使类别内的数据相似度较大而类别间的数据相似度较小. 数据聚类算法可以分为结构性或者分...

2603
来自专栏Pulsar-V

原-图像处理基础(二)图像的放大与缩小

最近邻插值法 ? 其中 size(g(x))代表图像像素矩阵列宽 size(g(y))代表图像像素矩阵行高 scale 代表缩放倍数 \begin{matr...

5867

Keras中神经网络模型的5阶段生命周期

使用Python的Keras库可以很容易创建和评测深度学习神经网络,但是您必须遵循严格的模型生命周期。

3239
来自专栏用户2442861的专栏

CNN卷积神经网络原理简介+代码详解

@blog:http://blog.csdn.net/u012162613/article/details/43225445

3963
来自专栏量化投资与机器学习

深度学习Matlab工具箱代码注释之cnnsetup.m

%%========================================================================= %...

3375
来自专栏文武兼修ing——机器学习与IC设计

Deep-compression阅读笔记基本步骤相关分析总结

以上是Deep compression中所述的神经网络压缩方法,主要包括三个步骤:

2082
来自专栏Python小屋

KNN分类算法原理与Python+sklearn实现根据身高和体重对体型分类

KNN算法是k-Nearest Neighbor Classification的简称,也就是k近邻分类算法。基本思路是在特征空间中查找k个最相似或者距离最近的样...

3937
来自专栏AI星球

机器学习 | 聚类分析总结 & 实战解析

聚类分析是没有给定划分类别的情况下,根据样本相似度进行样本分组的一种方法,是一种非监督的学习算法。聚类的输入是一组未被标记的样本,聚类根据数据自身的距离或相似度...

3062
来自专栏机器学习算法工程师

RNN入门与实践

作者:叶虎 编辑:黄俊嘉 引言 递归神经网络(Recurrent Neural Network, RNN)是神经网络家族的重要成员,而且也是深度学习领域中的得...

3727
来自专栏机器学习算法工程师

数据挖掘中的数据清洗方法大全

作者:章华燕 编辑:黄俊嘉 在数据挖掘领域,经常会遇到的情况是挖掘出来的特征数据存在各种异常情况,如数据缺失 、数据值异常 等。对于这些情况,如果不加以处理,那...

3725

扫码关注云+社区

领取腾讯云代金券