机器学习 | 线性算法 —— 大禹治水

 

        Machine-Learning: 《机器学习必修课:经典算法与Python实战》配套代码 - Gitee.com

 

        如果说KNN算法体现了人们对空间距离的理解,

        那么线性算法则体现了人们对事物趋势上的认识。

        

        注意图中横纵坐标的不同。

        

        线性回归、多项式回归多用于预测,逻辑回归多用于分类。

        回归就是 找条 “线"。

        看这条线本身便是回归任务,看这条线的两边便是分类任务。

        

 


 

 一、线性回归

 

一元线性回归

 

  • 最优化问题
  • 民主投票 Σ
  • 距离的衡量
  • 一元线性回归的解:

多元线性回归

  • 求解为:

多项式回归 —— 使用变量替换

 

  

 


 

 二、逻辑回归

 

逻辑回归(Logistic Function)

 

        不光用来解决回归任务,也能解决分类任务。 

        本质上还是找一条线,只不过关注的不是使数据更好的在这条线上,而是分布在这条线的两边。

        通常用于分类问题时,只能解决二分类问题。

        sigmod函数可以将线性分布变换为非线性。

         

       则现在的逻辑即 给定X和Y,找到合适的w,拟合p

                

        既然是投票,本质还是求距离:

                

        逻辑回归的损失函数即:

                

 


 

多项式逻辑回归 —— 使用变量替换

        

 


 

三、线性回归代码实现

 

3.1、一元线性回归

import numpy as np
from sklearn import datasets
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings("ignore")
boston = datasets.load_boston()
print(boston.DESCR)
.. _boston_dataset:

Boston house prices dataset
---------------------------

**Data Set Characteristics:**  

    :Number of Instances: 506 

    :Number of Attributes: 13 numeric/categorical predictive. Median Value (attribute 14) is usually the target.

    :Attribute Information (in order):
        - CRIM     per capita crime rate by town
        - ZN       proportion of residential land zoned for lots over 25,000 sq.ft.
        - INDUS    proportion of non-retail business acres per town
        - CHAS     Charles River dummy variable (= 1 if tract bounds river; 0 otherwise)
        - NOX      nitric oxides concentration (parts per 10 million)
        - RM       average number of rooms per dwelling
        - AGE      proportion of owner-occupied units built prior to 1940
        - DIS      weighted distances to five Boston employment centres
        - RAD      index of accessibility to radial highways
        - TAX      full-value property-tax rate per $10,000
        - PTRATIO  pupil-teacher ratio by town
        - B        1000(Bk - 0.63)^2 where Bk is the proportion of black people by town
        - LSTAT    % lower status of the population
        - MEDV     Median value of owner-occupied homes in $1000's

    :Missing Attribute Values: None

    :Creator: Harrison, D. and Rubinfeld, D.L.

This is a copy of UCI ML housing dataset.
https://archive.ics.uci.edu/ml/machine-learning-databases/housing/


This dataset was taken from the StatLib library which is maintained at Carnegie Mellon University.

The Boston house-price data of Harrison, D. and Rubinfeld, D.L. 'Hedonic
prices and the demand for clean air', J. Environ. Economics & Management,
vol.5, 81-102, 1978.   Used in Belsley, Kuh & Welsch, 'Regression diagnostics
...', Wiley, 1980.   N.B. Various transformations are used in the table on
pages 244-261 of the latter.

The Boston house-price data has been used in many machine learning papers that address regression
problems.   
     
.. topic:: References

   - Belsley, Kuh & Welsch, 'Regression diagnostics: Identifying Influential Data and Sources of Collinearity', Wiley, 1980. 244-261.
   - Quinlan,R. (1993). Combining Instance-Based and Model-Based Learning. In Proceedings on the Tenth International Conference of Machine Learning, 236-243, University of Massachusetts, Amherst. Morgan Kaufmann.

x = boston.data[:,5]
y = boston.target

x = x[y<50]
y = y[y<50]

plt.scatter(x,y)
plt.show()

from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.3, random_state = 0)

plt.scatter(x_train, y_train)
plt.show()

一元线性回归公式实现

def fit(x, y):
    a_up = np.sum((x-np.mean(x))*(y - np.mean(y)))
    a_bottom = np.sum((x-np.mean(x))**2)
    a = a_up / a_bottom
    b = np.mean(y) - a * np.mean(x)
    return a, b
a, b = fit(x_train, y_train)
a, b
(8.056822140369603, -28.49306872447786)
plt.scatter(x_train, y_train)
plt.plot(x_train, a*x_train+ b, c='r')
plt.show()

plt.scatter(x_test, y_test)
plt.plot(x_test, a*x_test+ b, c='r')
plt.show()

 

3.2、sklearn实现一元线性回归

from sklearn.linear_model import LinearRegression
lin_reg = LinearRegression()

lin_reg.fit(x_train.reshape(-1,1), y_train)

LinearRegression

LinearRegression()
y_predict = lin_reg.predict(x_test.reshape(-1,1))
plt.scatter(x_test, y_test)
plt.plot(x_test, y_predict, c='r')
plt.show()

 

3.3、sklearn 实现多元线性回归

x = boston.data
y = boston.target

x = x[y<50]
y = y[y<50]

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.3, random_state = 0)
lin_reg.fit(x_train, y_train)

LinearRegression

LinearRegression()
lin_reg.score(x_test, y_test)
0.7455942658788952

        归一化吗?

        多元线性回归中不需归一化,这是因为多元线性回归学习的就是每一维特征的权重。

from sklearn.preprocessing import StandardScaler
standardScaler = StandardScaler()
standardScaler.fit(x_train)
x_train = standardScaler.transform(x_train)
x_test = standardScaler.transform(x_test)
lin_reg.fit(x_train, y_train)

LinearRegression

LinearRegression()
lin_reg.score(x_test, y_test)
0.7455942658788963

 多项式回归与线性回归相同,只是需要添加新的特征。

Chapter-05/5-6 多项式回归实现.ipynb · 梗直哥/Machine-Learning - Gitee.com

 

 


 

3.4、模型评价之MSE、RMSE和MAE、R方

 

代码实现: 

Chapter-05/5-5 模型评价.ipynb · 梗直哥/Machine-Learning - Gitee.com 

 MSE RMSE 

        之所以开方,是由于因为平方可能会产生量纲问题,原来若是米,平方就变成平方米了。

        无论是MSE还是RMSE,衡量的都是与直线的距离。

         

MAE 

         

        通过对 二 中进行计算可得 MAE较小。

        这是由于RMSE先对误差进行了平方,其实是放大了较大误差之间的差距。

        因此在实际问题中RMSE的值越小,其意义越大。

        

 

R方

         

        若不能理解,可以将分子分母同时乘n分之一,则分母变成了方差,分子变成了MSE,可以理解为MSE消除了数据本身的影响,实现了归一化。

         

        R方越大,模型效果越好。 

MSE和MAE适用于误差相对明显的时候,而RMSE则是针对误差不是很明显的时候比较好。

MAE相比于MSE更能凸显异常值。

回归模型中loss函数一般使用 MAE/MSE/RMSE。

性能评估指标一般使用 R方。


 

四、逻辑回归代码实现

 

        线性回归和多项式回归都是由解析解的,就是说是损失函数可以通过代数变换直接把参数推导出来。但是逻辑回归没有解析解,所以更加复杂。

        —— 一切都是因为逻辑回归的损失函数。

        

        举个例子理解一下:

                二分类 —— 两党制                   argmin ](w) —— 最佳政策

                训练数据x —— 选民                 求解w过程 —— 唱票

                线性模型 —— 总统候选人         梯度 —— 激烈程度

                参数w —— 竞选政策

                Sigmoid函数 —— 选票

                Log函数 —— 厌恶度

                Σ —— 投票

                J —— 大选总损失

        这就需要 梯度 出场了。

        代码实现:

        Chapter-05/5-8 线性逻辑回归.ipynb · 梗直哥/Machine-Learning - Gitee.com

 

多分类:

        OVO(One vs One )Cn2个分类器

        

          OVR (One vs Rest ) n个分类器

         

         

 

        复杂逻辑回归、多分类代码实现:

        Chapter-05/5-10 复杂逻辑回归实现.ipynb · 梗直哥/Machine-Learning - Gitee.com 

 


 

五、线性算法优缺点及适用条件

        KNN算法:大老粗

                非参数模型,计算量大,好在数据无假设

        线性算法:头脑敏锐

                可解释性好,建模迅速,线性分布的假设

 

        

 


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/252467.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于linux系统的Tomcat+Mysql+Jdk环境搭建(四)linux安装Mysql

1.切换到你需要安装mysql的路径 cd /root/usr/ 2.在线安装 安装网上的安装方式都有很多&#xff0c;可以自己百度一下 我们这里是自己搭建测试环境&#xff0c;可以直接选择在线安装&#xff0c;命令如下&#xff1a;yum install mysql-server&#xff0c; 但是我失败了 ┭┮…

蜂鸣器的工作原理

电路原理图使用SH69P43为控制芯片&#xff0c;使用4MHz晶振作为主振荡器。 PORTC.3/T0作为I/O口通过三极管Q2来驱动蜂鸣器LS1&#xff0c;而PORTC.2/PWM0则作为PWM输出口通过三极管Q1来驱动蜂鸣器LS2。另外在PORTA.3和PORTA.2分别接了两个按键&#xff0c;一个是PWM按键&#x…

使用 Wired XDisplay 连接失败的原因

使用 Wired XDisplay 连接扩展屏&#xff0c;有时候会连接不上 &#xff0c;记下解决方法&#xff0c;以备后用&#xff1a; 1、扩展屏和主屏 一直在连接中&#xff0c;可能是其中一端没有提供数据访问权限 ps. 水果用户需要 打开 iTunes 并登陆 &#xff0c;安卓用户 可能是 …

Mistral MOE架构全面解析

从代码角度理解Mistral架构 Mistral架构全面解析前言Mistral 架构分析分词网络主干MixtralDecoderLayerAttentionMOEMLP 下游任务因果推理文本分类 Mistral架构全面解析 前言 Mixtral-8x7B 大型语言模型 (LLM) 是一种预训练的生成式稀疏专家混合模型。在大多数基准测试中&…

1.Mybtis-Plus框架基本使用

Mybatis-plus是一个mybatis的增强工具,在mybatis的基础上只做增加不做改变,简化开发 提供通用的`mapper和service` 可以在不编写任何SQL语句的情况下快速实现对单表CRUD、批量、逻辑删除、分页操作 Mybatis-plus提供优秀插件,并对idea中快速开发插件mybatisX也进行功能使用。…

甜酷女孩穿搭 I 时尚与保暖都兼具的羽绒服

这款工装风羽绒服 酷酷的中性风 清新温柔的杏紫两色 采用定制复合面料 顺滑平整硬朗的材质 具有防水功能 下雪下雨天也不用担心哦 90白鹅绒&#xff0c;立领连帽设计 帽子做的是可拆卸 可以切换两种风格 袖口采用可调节魔术贴设计 下摆可调节抽绳设计 处处透着细节…

网络安全——SSH密码攻击实验

一、实验目的要求&#xff1a; 二、实验设备与环境&#xff1a; 三、实验原理&#xff1a; 四、实验步骤&#xff1a;​ 五、实验现象、结果记录及整理&#xff1a; 六、分析讨论与思考题解答&#xff1a; 网络安全-SSH密码攻击实验效果截图&#xff1a; https://downloa…

设计模式(3)--对象结构(3)--组合

1. 意图 将对象组合成树形结构以表示“部分-整体”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性。 2. 三种角色 抽象组件(Component)、组合式节点(Composite)、叶节点(Leaf) 3. 优点 3.1 定义了包含基本对象和组合对象的类层次结构。 客户代码中&…

openwrt中taiscale自动安装脚本详解

openwrt中taiscale自动安装脚本详解 一、代码仓库地址 https://github.com/adyanth/openwrt-tailscale-enabler 二、代码仓库中脚本文件详解 主要包含三个脚本分别是etc/init.d/tailscale、usr/bin/tailscale、usr/bin/tailscaled &#xff0c;接下来逐个分析一下脚本中的具…

【Redis】AOF 基础

因为 Redis AOF 的实现有些绕, 就分成 2 篇进行分析, 本篇主要是介绍一下 AOF 的一些特性和依赖的其他函数的逻辑,为下一篇 (Redis AOF 源码) 源码分析做一些铺垫。 AOF 全称: Append Only File, 是 Redis 提供了一种数据保存模式, Redis 默认不开启。 AOF 采用日志的形式来记…

Go标准包之flag命令行参数解析

1.介绍 在 Go中&#xff0c;如果要接收命令行参数&#xff0c;需要使用 flag 包进行解析。不同的参数类型可以通过不同的方法接收。 2.参数接受 2.1 接受方式 使用flag接收参数&#xff0c;可以由以下三种方式接受&#xff1a; 方式一: flag.Type(name,defaultVal,desc)方…

Linux上使用HTTP协议进行数据获取的实战示例

嗨&#xff0c;Linux爱好者们&#xff0c;今天我们要一起探讨一下如何在Linux上进行HTTP协议的数据获取。这不是一项简单的任务&#xff0c;但放心&#xff0c;我会以最简单的语言&#xff0c;结合实例来给大家讲解。 首先&#xff0c;我们需要一个工具&#xff0c;那就是curl…

Python生成器(Generator)(继续更新...)

学习网页&#xff1a; Welcome to Python.orghttps://www.python.org/https://www.python.org/ Python生成器 生成器&#xff08;Generator&#xff09;是 Python 的一种特殊类型的迭代器。生成器允许你创建自己的数据流&#xff0c;每次从数据流中获取一个元素&#xff0c;…

医保电子凭证在项目中的集成应用

随着医保电子凭证使用普及&#xff0c;医疗行业的各个场景都要求支持医保码一码通办&#xff0c;在此分享一下&#xff0c;在C#和js中集成医保电子凭证的demo 供有需要的小伙伴参考。 一、项目效果图 在c#中集成医保电子凭证效果 在js中集成医保电子凭证效果 二、主要代码 c#…

Linux_Docker图形化工具Portainer如何安装并结合内网穿透实现远程访问

文章目录 前言1. 部署Portainer2. 本地访问Portainer3. Linux 安装cpolar4. 配置Portainer 公网访问地址5. 公网远程访问Portainer6. 固定Portainer公网地址 前言 本文主要介绍如何本地安装Portainer并结合内网穿透工具实现任意浏览器远程访问管理界面。Portainer 是一个轻量级…

算法竞赛备赛进阶之树形DP训练

目录 1.树的最长路径 2.树的中心 3.数字转换 4.二叉苹果树 5.战略游戏 6.皇宫守卫 树形DP是一种动态规划方法&#xff0c;主要用于解决树形结构的问题。在树形DP中&#xff0c;通常会使用动态规划的思想来求解最优化问题。其核心在于通过不断地分解问题和优化子问题来解决…

【理论篇】SaTokenException: 非Web上下文无法获取Request问题解决 -理论篇

在我们使用sa-token安全框架的时候&#xff0c;有时候会提示&#xff1a;SaTokenException:非Web上下文无法获取Request 错误截图&#xff1a; 在官方网站中&#xff0c;查看常见问题排查&#xff1a; 错误追踪&#xff1a; 跟着源码可以看到如下代码&#xff1a; 从源码中&a…

01 整体代码运行流程

文章目录 01 整体代码运行流程1.1 运行官方 Demo1.2 变量命名规则1.3 多线程1.4 线程锁1.5 SLAM 主类 System 01 整体代码运行流程 1.1 运行官方 Demo 以 stereo_kitti 为例&#xff0c;执行 ./stereo_kitti path_to_vocabulary path_to_settings path_to_sequence./stereo_…

大创项目推荐 深度学习 python opencv 实现人脸年龄性别识别

文章目录 0 前言1 项目课题介绍2 关键技术2.1 卷积神经网络2.2 卷积层2.3 池化层2.4 激活函数&#xff1a;2.5 全连接层 3 使用tensorflow中keras模块实现卷积神经网络4 Keras介绍4.1 Keras深度学习模型4.2 Keras中重要的预定义对象4.3 Keras的网络层构造 5 数据集处理训练5.1 …

W25Q64(模拟SPI)读写数据的简单应用

文章目录 一、W25Q64是什么&#xff1f;二、使用步骤1.硬件1.引脚说明2.硬件连接3.设备ID4.内部框架5.指令集指令集1指令集2 2.软件1.W25Q64引脚定义代码如下&#xff08;示例&#xff09;&#xff1a;2.W25Q64初始化代码如下&#xff08;示例&#xff09;&#xff1a;3.W25Q64…