记录下学习使用sklearn,将使用sklearn实现机器学习大部分内容

基于scikit-learn机器学习(第2版)这本书,和scikit-learn中文社区

简单线性回归

首先,最简单的线性回归也有几个地方要注意

  1. fit的时候,对于X,要求是n*m的类型,y要是n*1的类型
  2. 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机器学习实战-简单线性回归的更多相关文章

  1. 使用sklearn机器学习库实现线性回归

    import numpy as np  # 导入科学技术框架import matplotlib.pyplot as plt  # 导入画图工具from sklearn.linear_model imp ...

  2. sklearn机器学习实战-KNN

    KNN分类 KNN是惰性学习模型,也被称为基于实例的学习模型 简单线性回归是勤奋学习模型,训练阶段耗费计算资源,但是预测阶段代价不高 首先工作是把label的内容进行二值化(如果多分类任务,则考虑On ...

  3. scikit-learn机器学习(一)简单线性回归

    # -*- coding: utf-8 -*- import numpy as np import matplotlib.pyplot as plt ## 设置字符集,防止中文乱码 import ma ...

  4. 机器学习实战 | SKLearn最全应用指南

    作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/41 本文地址:http://www.showmeai.tech/article-det ...

  5. 机器学习——Day 2 简单线性回归

    写在开头 由于某些原因开始了机器学习,为了更好的理解和深入的思考(记录)所以开始写博客. 学习教程来源于github的Avik-Jain的100-Days-Of-MLCode 英文版:https:// ...

  6. sklearn学习笔记之简单线性回归

    简单线性回归 线性回归是数据挖掘中的基础算法之一,从某种意义上来说,在学习函数的时候已经开始接触线性回归了,只不过那时候并没有涉及到误差项.线性回归的思想其实就是解一组方程,得到回归函数,不过在出现误 ...

  7. 机器学习与Tensorflow(1)——机器学习基本概念、tensorflow实现简单线性回归

    一.机器学习基本概念 1.训练集和测试集 训练集(training set/data)/训练样例(training examples): 用来进行训练,也就是产生模型或者算法的数据集 测试集(test ...

  8. 机器学习(2):简单线性回归 | 一元回归 | 损失计算 | MSE

    前文再续书接上一回,机器学习的主要目的,是根据特征进行预测.预测到的信息,叫标签. 从特征映射出标签的诸多算法中,有一个简单的算法,叫简单线性回归.本文介绍简单线性回归的概念. (1)什么是简单线性回 ...

  9. Python线性回归算法【解析解,sklearn机器学习库】

    一.概述 参考博客:https://www.cnblogs.com/yszd/p/8529704.html 二.代码实现[解析解] import numpy as np import matplotl ...

随机推荐

  1. (转载)MySQL删除所有表的外键约束、禁用外键约束

    其实如果想删除所有表可以直接如下操作: 在navicat中直接选中所有表,然后右键删除表即可,会有提示,一路确定,就会先删掉没有外键的表和字表,只要一路确定,删几批就把表都删完了,并不算太麻烦. 转: ...

  2. 2_稳定性分析_极点_Stability

    在复平面内 控制理论就是设计控制器D使输入输出之间的传递函数的极点落在复平面的左侧,在现代控制理论中研究状态矩阵的特征值判断稳定性

  3. 该如何选择 background-image 和 img 标签

    用img标签 如果你希望别人打印页面时候包含这张图片请使用 img 标签 当这张图片有非常有意义的语义,比如警告图标,请使用img标签及它的alt属性.这样意味着你可以向所有的用户终端现实他的意义. ...

  4. React 可视化开发工具 Shadow Widget 非正经入门(之五:指令式界面设计)

    本系列博文从 Shadow Widget 作者的视角,解释该框架的设计要点.本篇解释 Shadow Widget 中类 Vue 的控制指令,与指令式界面设计相关. 1. 指令式界面设计 Vue 与 A ...

  5. es6零碎记忆

    1:substring 和 substr var str = '0123456789' console.log(str.substring(1)); //123456789 console.log(s ...

  6. javaweb之模糊查询

    模糊查询,主要通过sql语句来进行查询 一.dao层 加入模糊查询的方法 package dao; import java.sql.Connection; import java.sql.Prepar ...

  7. pip freeze > requirements.txt` 命令输出文件中出现文件路径而非版本号

    pip freeze > requirements.txt 命令输出文件中出现文件路径而非版本号 解决办法: pip list --format=freeze > requirements ...

  8. 【weex开发】weex官方源码

    公司目前使用版本:weex_sdk:0.10.0 介绍地址:https://bintray.com/alibabaweex/maven/weex_sdk/0.18.0 weex最新版本:weex_sd ...

  9. 【Android开发】【布局】几个常用布局构成的简单demo

    图image1.jpg,就是常用的 底部菜单栏 + Fragment联动 使用 RadioGroup + Fragment 图image2.jpg ,就是 TabLayout + ViewPager ...

  10. 每日学习+AS小相册+导入图片标红的原因

    学习内容: 1.TextView(怎么设置文本). Button(怎么设置按钮事件). ImageView(怎么设置图片) 2.LinearLayout的基本使用 今日成果:做了一个小相册 遇到的问题 ...