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

相关文章

来自专栏https://www.cnblogs.com/L

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

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

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

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

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

1352
来自专栏机器学习算法原理与实践

scikit-learn随机森林调参小结

    在Bagging与随机森林算法原理小结中,我们对随机森林(Random Forest, 以下简称RF)的原理做了总结。本文就从实践的角度对RF做一个总结...

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

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

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

3265
来自专栏Pulsar-V

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

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

5157
来自专栏有趣的Python

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

1665
来自专栏程序生活

Word2Vec教程-Skip-Gram模型模型“伪”任务关于模型的更多细节隐藏层输出层

原文:Word2Vec Tutorial - The Skip-Gram Model ---- 这篇教程主要讲述了Word2Vec中的skip gram模型,...

3684
来自专栏智能算法

KNN最近邻算法及其Python实现

k-NN是一种基本的分类和回归方法,用于分类时,算法思路较简单:通过计算不同特征之间的距离方法来得到最近的k个训练实例,根据k个实例的类别采用多数表决等方式进...

6257

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

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

2679
来自专栏生信小驿站

机器学习预测乳腺癌良恶性(1)(逻辑回归)

逻辑回归算法思想:逻辑回归(LogisticRegression)是当前机器学习算法比较常用的方法,可以用来回归分析,也可以用来分类,主要是二分类问题。逻辑回归...

1183

扫码关注云+社区