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 ...
随机推荐
- JPA、JTA、XA相关索引
JPA和分布式事务简介:https://www.cnblogs.com/onlywujun/p/4784233.html JPA.JTA与JMS区别:https://www.cnblogs.com/y ...
- html 5 读取本地文件API
代码: <input type="file" name="uploadfile" class="J-upload"> <s ...
- 让弹幕给 PPD 生个孩子
怎样才能跑起来我写的弹幕程序 资源下载 申请野狗后端云账号注册 创建应用: 复制appId到index.html的 var ref = new Wilddog("https://<ap ...
- CSS系列——浏览器默认样式
了解HTML标签在各浏览器当中的默认样式,可以让我们了解,为什么会要写Reset.css,Reset.css当中要怎么写样式最合理.试着思考下面的问题: 为什么会有默认样式? 每个浏览器的默认样式有什 ...
- x64 番外篇——保护模式相关
写在前面 此系列是本人一个字一个字码出来的,包括示例和实验截图.由于系统内核的复杂性,故可能有错误或者不全面的地方,如有错误,欢迎批评指正,本教程将会长期更新. 如有好的建议,欢迎反馈.码字不易, ...
- Checkstyle的安装与使用
两种安装方法: 方法一: 1.Eclipse中,选择Help->Software Updates->Find and Install 2.选择 Search for new feature ...
- idea启动tomcat后控制台日志显示中文乱码问题
想必有些人 会遇到 控制台中文乱码: 可以通过以下方法解决该中文乱码问题: 1. 点击Help => Edit custom VM Options,在最后面添加 "-Dfile.en ...
- 循序渐进搞懂 TCP 三次握手核心
前言 本文旨在通过形象的例子和实操,把无形的.虚拟的网络转为具体的.可视化的.带领网络小白一步步的掌握 TCP 三次握手核心知识点,为后续深入学习 TCP 协议打基础. 通俗版 如下图所示,小明(客户 ...
- 记-Golang日志文件读取及写入操作
Golang语言的 os 包中OpenFile 函数,如下所示: func OpenFile(name string, flag int, perm FileMode) (*File, error) ...
- DTO数据传输对象详解
文章目录 一.DTO是什么? 二.DTO解决的问题 三.代码演示 一.DTO是什么? DTO (数据传输对象) 数据传输对象(DTO),是一种设计模式之间传输数据的软件应用系统.数据传输目标往往是数据 ...