sklearn机器学习实战-简单线性回归
记录下学习使用sklearn,将使用sklearn实现机器学习大部分内容
基于scikit-learn机器学习(第2版)这本书,和scikit-learn中文社区
简单线性回归
首先,最简单的线性回归也有几个地方要注意
- fit的时候,对于X,要求是n*m的类型,y要是n*1的类型
- sklearn会将得到的系数存储起来,分别在coef_中和intercept_中,intercept_是偏移,也就是b,coef_是k,或者向量中的W
来看具体例子
from sklearn.linear_model import LinearRegression
model = LinearRegression()
import numpy as np
# 线性模型为y = kx + b
X = np.array([1,2,3,4,5,6]).reshape(-1,1)
y = [1,2.1,2.9,4.1,5.2,6.1]
# y = np.array([1,2.1,2.9,4.1,5.2,6.1]) 这样写也是可以的
# y = np.array([1,2.1,2.9,4.1,5.2,6.1]).reshape(-1,1) 这样写也是可以的
# y = np.array([1,2.1,2.9,4.1,5.2,6.1]).reshape(1,-1) 这样写就不行了
model.fit(X,y)
print(model.coef_)
print(model.intercept_)
/*
[[1.02857143]]
[-0.03333333]
*/
上面y的长度总是要和X保持一致的
y = [1,2.1,2.9,4.1,5.2,6.1]
print("y:")
print(y)
y = np.array([1,2.1,2.9,4.1,5.2,6.1]) # 这样写也是可以的
print("y:")
print(y)
print(y.shape)
y = np.array([1,2.1,2.9,4.1,5.2,6.1]).reshape(-1,1) # 这样写也是可以的
print("y:")
print(y)
print(y.shape)
y = np.array([1,2.1,2.9,4.1,5.2,6.1]).reshape(1,-1) # 这样写就不行了
print("y:")
print(y)
print(y.shape)
/*
y:
[1, 2.1, 2.9, 4.1, 5.2, 6.1]
y:
[1. 2.1 2.9 4.1 5.2 6.1]
(6,)
y:
[[1. ]
[2.1]
[2.9]
[4.1]
[5.2]
[6.1]]
(6, 1)
y:
[[1. 2.1 2.9 4.1 5.2 6.1]]
(1, 6)
*/
再来看这个例子
# 最小二乘法用于sklearn中的线性回归,引入它。
from sklearn import linear_model
reg = linear_model.LinearRegression()
def foo(x1,x2): # w0 = 5, w1 = 2, w2 = 3
return 2 * x1 + 3 * x2 + 5
"""生成测试数据 X,y
X 10行2列
y 10行1列
"""
X = [[i,(i+1)/2] for i in range(10)]
y = [foo(i,(i+1)/2) for i in range(10)]
# 根据参数拟合直线
reg.fit(X,y)
# 输出 w1,w2 = [2.8, 1.4]
print(reg.coef_)
# 输出 w0 = 5.8
print(reg.intercept_)
"""
拟合直线: y = 2.8 * x1 + 1.4 * x2 + 5.8
"""
# 用生成的直线进行预测
print(reg.predict(X))
[2.8 1.4]
5.799999999999997
X:
[[0, 0.5], [1, 1.0], [2, 1.5], [3, 2.0], [4, 2.5], [5, 3.0], [6, 3.5], [7, 4.0], [8, 4.5], [9, 5.0]]
y:
[6.5, 10.0, 13.5, 17.0, 20.5, 24.0, 27.5, 31.0, 34.5, 38.0]
predict:
[ 6.5 10. 13.5 17. 20.5 24. 27.5 31. 34.5 38. ]
这个例子来源:https://blog.csdn.net/weixin_43899202/article/details/104155313
看完之后第一反应是,明明 y = 2 * x1 + 3 * x2 + 5,怎么就变成 y = 2.8 * x1 + 1.4 * x2 + 5.8
这是因为我们对X赋值的时候都是等比例缩放,我们现在再用两个测试集去验证一下就知道了
# 验证集1
X_test = np.array([[0,0],[1,1],[2,2],[3,3],[4,4],[5,5]])
y_test1 = np.array([5,10,15,20,25,30])
score1 = reg.score(X_test,y_test1)
print("score1:")
print(score1)
# 验证集2
X_test = np.array([[0,0],[1,1],[2,2],[3,3],[4,4],[5,5]])
y_test2 = np.array([5.8,10,14.2,18.4,22.6,26.8])
score2 = reg.score(X_test,y_test2)
print("score2")
print(score2)
score1:
0.9546514285714286
score2
1.0
最后,再使用predict方法
X_predict = np.array([[0,0],[0,1],[1,1],[1,2],[2,2]])
print(reg.predict(X))
[ 6.5 10. 13.5 17. 20.5 24. 27.5 31. 34.5 38. ]
这样,学习使用了线性模型、fit方法、predict方法、score方法,以及线性模型的参数coef_和intercept_
sklearn机器学习实战-简单线性回归的更多相关文章
- 使用sklearn机器学习库实现线性回归
import numpy as np # 导入科学技术框架import matplotlib.pyplot as plt # 导入画图工具from sklearn.linear_model imp ...
- sklearn机器学习实战-KNN
KNN分类 KNN是惰性学习模型,也被称为基于实例的学习模型 简单线性回归是勤奋学习模型,训练阶段耗费计算资源,但是预测阶段代价不高 首先工作是把label的内容进行二值化(如果多分类任务,则考虑On ...
- scikit-learn机器学习(一)简单线性回归
# -*- coding: utf-8 -*- import numpy as np import matplotlib.pyplot as plt ## 设置字符集,防止中文乱码 import ma ...
- 机器学习实战 | SKLearn最全应用指南
作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/41 本文地址:http://www.showmeai.tech/article-det ...
- 机器学习——Day 2 简单线性回归
写在开头 由于某些原因开始了机器学习,为了更好的理解和深入的思考(记录)所以开始写博客. 学习教程来源于github的Avik-Jain的100-Days-Of-MLCode 英文版:https:// ...
- sklearn学习笔记之简单线性回归
简单线性回归 线性回归是数据挖掘中的基础算法之一,从某种意义上来说,在学习函数的时候已经开始接触线性回归了,只不过那时候并没有涉及到误差项.线性回归的思想其实就是解一组方程,得到回归函数,不过在出现误 ...
- 机器学习与Tensorflow(1)——机器学习基本概念、tensorflow实现简单线性回归
一.机器学习基本概念 1.训练集和测试集 训练集(training set/data)/训练样例(training examples): 用来进行训练,也就是产生模型或者算法的数据集 测试集(test ...
- 机器学习(2):简单线性回归 | 一元回归 | 损失计算 | MSE
前文再续书接上一回,机器学习的主要目的,是根据特征进行预测.预测到的信息,叫标签. 从特征映射出标签的诸多算法中,有一个简单的算法,叫简单线性回归.本文介绍简单线性回归的概念. (1)什么是简单线性回 ...
- Python线性回归算法【解析解,sklearn机器学习库】
一.概述 参考博客:https://www.cnblogs.com/yszd/p/8529704.html 二.代码实现[解析解] import numpy as np import matplotl ...
随机推荐
- 什么是持续集成(CI)?
持续集成(CI)是每次团队成员提交版本控制更改时自动构建和测试代码的过程. 这鼓励开发人员通过在每个小任务完成后将更改合并到共享版本控制存储库来共 享代码和单元测试.
- 是否可以继承 String 类?
String 类是 final 类,不可以被继承. 补充:继承 String 本身就是一个错误的行为,对 String 类型最好的重用方式是关 联关系(Has-A)和依赖关系(Use-A)而不是继承关 ...
- Django中的信号signals
什么是信号? jango的信号机制就是事件驱动模型,一个事件可以被多个函数注册,当一个动作行为触发了这个事件后,这个事件所对应的函数便执行相应的操作; 内置信号; django 内部有些定义好的sig ...
- Tcp的Flags
在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG. 其中,对于我们日常的分析有用的就是前面的五个字段. 它们的含义是: SYN表示建立连 ...
- [译]HTML&CSS Lesson5: 定位
CSS最大的用处之一就是可以将内容和元素定位到任何我们想要的位置,使我们的设计具有结构,使内容更加易懂. CSS有好几种不同的定位属性,每种都有自己的使用场景.在这节课中我们会通过不同的案例--可复用 ...
- 使用jquery-webcam插件,实现人脸采集并转base64
项目需求:在ie或chrome浏览器下,调用电脑摄像头(确保使用的是笔记本电脑,或者摄像头功能正常使用的台式机),进行人脸图像采集预览,并将图片的base64码传入到后台进行后续操作.该demo适用于 ...
- SphinxJS——把字符串编码成png图片的超轻量级开源库
体验地址:https://jrainlau.github.io/sp...项目地址:https://github.com/jrainlau/s... SphinxJS 一个能够把字符串编码成png图片 ...
- 五款轻量型bug管理工具横向测评
五款轻量型bug管理工具横向测评 最近正在使用的本地bug管理软件又出问题了,已经记不清这是第几次了,每次出现问题都要耗费大量的时间精力去网上寻找解决方案,劳心劳力.为了避免再次出现这样的情况,我决定 ...
- vue和mint-ui loadMore 实现上拉加载和下拉刷新
首先安装mint-ui组件库 npm install mint-ui 在main.js中引入mint-ui和样式 import 'mint-ui/lib/style.css' import MintU ...
- SpringMVC的数据响应-回写数据
1.直接返回字符串 其他具体代码请访问chilianjie @RequestMapping("/report5") public String save5(HttpServletR ...