机器学习-02 基于sklearn 广义线性模型-普通最小二乘法
机器学习 基于sklearn-02 从sklearn说起
- 线性回归
- 普通最小二乘法
- 案例分析
- 重要代码解释
线性回归
回归分析的主要工作,是根据统计获得的数据点来训练出一个函数表达式,根据这个函数表达式来对新的数据点进行预测。
线性是指线性方程。线性方程也就是一次函数,一元一次函数的定义式如下所以。
y=k∗x+by=k*x+by=k∗x+b
在做回归分析时,数据的影响因素不止一个因此需要使用多元一次函数来拟合。预测出的值为预测值,用y^\hat{y}y^来表示。真实值用y{y}y来表示。
y^(ω,x)=ω0+ω1x1+⋯+ωnxn\hat{y}(\omega ,x)={{\omega }_{0}}+{{\omega }_{1}}{{x}_{1}}+\cdots +{{\omega }_{n}}{{x}_{n}}y^(ω,x)=ω0+ω1x1+⋯+ωnxn
其中ω=(ω0,ω1,⋯,ωn)\omega =({{\omega }_{0}},{{\omega }_{1}},\cdots ,{{\omega }_{n}})ω=(ω0,ω1,⋯,ωn)为函数的系数。线性回归的工作就是确定这些系数的值,来使y^\hat{y}y^尽量接近y{y}y。
普通最小二乘法
普通最小二乘法就是求系数值的最简单的一种方法。我们的目的是使y^\hat{y}y^尽量接近y{y}y。用数学来表示就是minω∑i=1n(Xω−yi)2\underset{\omega }{\mathop{\min }}\,\sum\limits_{i=1}^{n}{{{\left( X\omega -{{y}_{i}} \right)}^{2}}}ωmini=1∑n(Xω−yi)2
接下来分别对ω=(ω0,ω1,⋯,ωn)\omega =({{\omega }_{0}},{{\omega }_{1}},\cdots ,{{\omega }_{n}})ω=(ω0,ω1,⋯,ωn)求偏导数,当偏导数等于0时可以求到极值。
∂f∂ω0=0\frac{\partial f}{\partial {{\omega }_{0}}}=0∂ω0∂f=0,∂f∂ω1=0\frac{\partial f}{\partial {{\omega }_{1}}}=0∂ω1∂f=0,……,∂f∂ωn=0\frac{\partial f}{\partial {{\omega }_{n}}}=0∂ωn∂f=0。
从而可以求出参数的值。
案例分析
在sklearn官方手册中有这么一个示例我们可以来对普通最小二乘法进行验证。点击。
现将代码摘录如下
import matplotlib.pyplot as plt
import numpy as np
from sklearn import datasets, linear_model
from sklearn.metrics import mean_squared_error, r2_score# Load the diabetes dataset
diabetes_X, diabetes_y = datasets.load_diabetes(return_X_y=True)# Use only one feature
diabetes_X = diabetes_X[:, 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_y[:-20]
diabetes_y_test = diabetes_y[-20:]# Create linear regression object
regr = linear_model.LinearRegression()# Train the model using the training sets
regr.fit(diabetes_X_train, diabetes_y_train)# Make predictions using the testing set
diabetes_y_pred = regr.predict(diabetes_X_test)# The coefficients
print('Coefficients: \n', regr.coef_)
# The mean squared error
print('Mean squared error: %.2f'% mean_squared_error(diabetes_y_test, diabetes_y_pred))
# The coefficient of determination: 1 is perfect prediction
print('Coefficient of determination: %.2f'% r2_score(diabetes_y_test, diabetes_y_pred))# Plot outputs
plt.scatter(diabetes_X_test, diabetes_y_test, color='black')
plt.plot(diabetes_X_test, diabetes_y_pred, color='blue', linewidth=3)plt.xticks(())
plt.yticks(())plt.show()
重要代码解释
真正用来构建模型和进行预测的代码只要三行。
# Create linear regression object
regr = linear_model.LinearRegression()# Train the model using the training sets
regr.fit(diabetes_X_train, diabetes_y_train)# Make predictions using the testing set
diabetes_y_pred = regr.predict(diabetes_X_test)
- 创建线性回归模型
- fit()函数用来模型的构建,输入数据是训练数据集。
- predict()函数用来做预测,输入数据是测试数据集。
机器学习-02 基于sklearn 广义线性模型-普通最小二乘法相关推荐
- 机器学习(二)——广义线性模型、生成学习算法
http://antkillerfarm.github.io/ 逻辑回归(续) 注:Ronald Aylmer Fisher,1890-1962,英国人,毕业于剑桥大学.英国皇家学会会员.尽管他被称作 ...
- 机器学习(一) 基于sklearn库的数据集划分(交叉验证)
机器学习中首要环节就是数据集的处理,其中数据集的处理从个人理解(如有错误敬请谅解)的角度来说包括两个方面:数据集划分和数据清理.其中数据集划分是指训练集.验证集和测试集的数据类别划分:数据清理是指数据 ...
- 机器学习笔记—再谈广义线性模型
前文从线性回归和 Logistic 回归引出广义线性回归的概念,很多人还是很困惑,不知道为什么突然来个广义线性回归,有什么用?只要知道连续值预测就用线性回归.离散值预测就用 Logistic 回归不就 ...
- scikit-learn广义线性模型之最小二乘法
本系列教程是scikit-learn学习的第一篇,我会根据scikit-learn官网教程和自己的学习,写关于scikit-learn的学习一系列教程.首先,我会介绍模型的一些基本知识,不会去深层次的 ...
- 【机器学习】知否?知否?广义线性模型
本文介绍了广义线性模型,其中线性回归.logistic回归,softmax回归同属于广义线性模型.从指数分布家族推导出高斯分布.伯努利分布对应的指数分布家族形式,以最大化期望为目标推导出线性回归.lo ...
- 01_sklearn--监督学习——广义线性模型,普通最小二乘法
1.1.广义线性模型 本章节主要讲述一些用于回归的方法,其中目标值y是输入变量x的线性组合.数学概念表示为:如果是预测值,那么有: (w,x)= + +...+ 在整个模块中,我们定义向量作为coef ...
- python 机器学习_基于 Python 语言的机器学习工具Sklearn
本篇介绍了Sklearn机器学习基础,从Sklearn的简介,模块以及与tensorflow的优劣势对比来了解基于Python语言的机器学习工具. 01.Sklearn简介 sklearn(sc ...
- 系统学习机器学习之线性判别式(三)--广义线性模型(Generalized Linear Models)
转自:https://www.cnblogs.com/czdbest/p/5769326.html 在线性回归问题中,我们假设,而在分类问题中,我们假设,它们都是广义线性模型的例子,而广义线性模型就是 ...
- 机器学习-线性模型及广义线性模型
线性模型(linear model) 线性模型试图学得一个通过属性的线性组合来进行预测的函数,即: ... (其中;...;为输入属性,;...;和b为模型参数) 向量表示为: (其中为输入属性 ...
最新文章
- 手机app软件测试教程,手机app制作软件测试app的技巧和方式(上)
- iOS10 UI教程管理层次结构
- git 拉取和获取 pull 和 fetch 区别
- hdu 六度分离 floyd
- Profile配置和加载配置文件
- 培训协议与服务器有没有要求,上面说的是提供专业培训且规定了服务器和培训费以及违约金的问题。试用期辞职单位有没有权利追究违约金呢?- 法律快车法律咨询...
- zabbix专题:附加 zabbix配置文件详解
- 恢复误删除的域用户及几个查询命令
- 普联(TP-LINK)的无线网卡在Linux下如何使用
- 车牌号识别Python+OpenCV实现(含代码)
- PCIe学习(二):PCIe DMA关键模块分析之一
- 小米3com.android.phone是什么,小米3NFC是什么意思以及NFC功能怎么设置使用
- 传奇服务器都有哪些文件,传奇服务端目录文件详细说明
- 开发webservice 遇到问题 No message body writer has been found for class
- Etabs及Sap2000地震波输入
- 工程伦理--10.1 职业美德
- python例子下载_python例子下载
- 创业基础-乐训课堂-第四章 创业风险及识别与管理-课堂笔记
- web实验一JSP环境配置及开发、运行
- 二级c语言程序题常考知识点,计算机等级考试二级C语言常见知识点总结