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

        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.targetx = 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_bottomb = 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.targetx = 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算法:大老粗

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

        线性算法:头脑敏锐

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

        


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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Manacher算法(马拉车)

Manacher&#xff08;马拉车&#xff09;算法 作用&#xff1a;在On的时间复杂度下&#xff0c;求出字符串每个回文中心的最长回文半径 回文半径&#xff1a;以回文中心为起点&#xff0c;到回文串两端的距离 如&#xff1a;# a # b # a # 以b为回文中心&#xff0c;最长回文半…

Springboot+Mybatis入门案例

一、项目结构 1.导入依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apach…

实现基于 Keepalived 和 Nginx 的高可用架构

目录 前言1 高可用性简介2 准备服务器和软件3 高可用的配置&#xff08;主从配置&#xff09;3.1 配置/etc/keepalived/keepalived.conf文件3.2 配置/usr/local/src/nginx_check.sh脚本文件 4 启动软件5 测试结语 前言 在现代互联网架构中&#xff0c;高可用性是至关重要的。N…

<九>JavaScript中的基本数据类型和引用数据类型

一、栈内存和堆内存 基本数据类型&#xff08;值类型&#xff09;存放在“栈内存”中。引用数据类型&#xff08;对象类型&#xff09;存放在“堆内存”中。栈内存和堆内存是一种对内存的管理方式和模型概念&#xff0c;不存在物理分割。 “栈”具有线程和“先进后出”的特点…

GBJ2510-ASEMI逆变器专用整流桥GBJ2510

编辑&#xff1a;ll GBJ2510-ASEMI逆变器专用整流桥GBJ2510 型号&#xff1a;GBJ2510 品牌&#xff1a;ASEMI 封装&#xff1a;GBJ-4 最大平均正向电流&#xff1a;25A 最大重复峰值反向电压&#xff1a;1000V 产品引线数量&#xff1a;4 产品内部芯片个数&#xff1a;…

基于ssm防疫信息登记系统的设计与实现论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本防疫信息登记系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息…

配置https环境

为什么要配置https环境 在使用 HTML5 的 API 时&#xff0c;很多 API 只能在 https 保证安全的情况下才能开启。这就要求我们在本地开发环境也能够配置 https&#xff0c;否则你需要每次部署到配有 https 的测试环境中才能看到预览效果&#xff0c;这对开发的敏捷度造成了极大…

网络空间搜索引擎- FOFA的使用技巧总结

简介 FOFA是一款网络空间测绘的搜索引擎&#xff0c;旨在帮助用户以搜索的方式查找公网上的互联网资产。 FOFA的查询方式类似于谷歌或百度&#xff0c;用户可以输入关键词来匹配包含该关键词的数据。不同的是&#xff0c;这些数据不仅包括像谷歌或百度一样的网页&#xff0c;还…

AI语音电话机器人识别技术声音合成声音是怎么实现的

AI语音识别技术的声音合成是通过将文本转换为声音信号的过程实现的。这个过程包含以下步骤&#xff1a; 文本分析和处理&#xff1a;首先&#xff0c;输入的文本会接受分析和处理。这可能涉及到词法分析、语法分析和语义分析等技术&#xff0c;用于理解文本的含义和上下文。 …

【Mybatis】日常知识点随笔(持续更新)

目录 【K】Mybatis使用Select注解书写简单sql 【K】MySQL 数据类型与 Java 类型的对应关系 【K】Mybatis相同代码复用 1. 定义公共 SQL 片段 2. 引用公共 SQL 片段 3. 使用参数 4. 复用和组合 5. 注意事项 【K】mysql如何实现插入一条数据后立刻获取该数据自增长id进行…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)更改应用图标

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;更改应用图标 一、操作环境 操作系统: Windows 10 专业版 IDE:DevEco Studio 3.1 SDK:HarmonyOS 3.1 二、更改图标 图标的位置&#xff1a;entry->src->main->resources->-b…

智慧校园2.0物联网管理平台建设方案:PPT全文22页,附下载

关键词&#xff1a;物联网解决方案&#xff0c;智慧校园解决方案&#xff0c;物联网平台建设方案&#xff0c;物联网应用技术 一、智慧校园2.0物联网管理平台建设背景 1、教育现代化和强国建设的需要&#xff1a;近年来&#xff0c;国家为了加快推进教育现代化、教育强国建设…

java SpringCloud版本b2b2c鸿鹄云商平台全套解决方案

使用技术&#xff1a; Spring CloudSpring BootMybatis微服务服务监控可视化运营 B2B2C平台&#xff1a; 平台管理端(包含自营) 商家平台端(多商户入驻) PC买家端、手机wap/公众号买家端 微服务&#xff08;30个通用微服务如&#xff1a;商品、订单、购物车、个人中心、支…

kubernetesr安全篇之云原生安全概述

云原生 4C 安全模型 云原生 4C 安全模型&#xff0c;是指在四个层面上考虑云原生的安全&#xff1a; Cloud&#xff08;云或基础设施层&#xff09;Cluster&#xff08;Kubernetes 集群层&#xff09;Container&#xff08;容器层&#xff09;Code&#xff08;代码层&#xf…

[密码学]AES

advanced encryption standard&#xff0c;又名rijndael密码&#xff0c;为两位比利时数学家的名字组合。 分组为128bit&#xff0c;密钥为128/192/256bit可选&#xff0c;对应加密轮数10/12/14轮。 基本操作为四种&#xff1a; 字节代换&#xff08;subBytes transformatio…

结构体基础例题

这里写目录标题 例题一例题解析答案 例题二例题解析答案 例题三例题解析答案 例题四例题解析答案 例题五例题解析及答案 例题六例题解析及答案 感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接 &#x1f412;&#x1f412;&#x1f412; 个人主页 &#x1f978…

Elasticsearch——快速入门

从零基础的内容开始介绍Elasticsearch&#xff0c;主要包含以下内容&#xff1a; Elasticsearch的定义、优点&#xff0c;以及典型的业务场景。Elasticsearch中重要的概念。Elasticsearch典型的接入方式。安装Elasticsearch。使用Kibana调试Elasticsearch。Elasticsearch节点的…

何为内存泄漏?如何监测并防止内存泄漏事故发生?

内存泄漏会严重影响计算机的性能&#xff0c;但它们到底是什么&#xff0c;为什么会发生&#xff1f;如何检测和防止内存泄漏呢&#xff1f; 本文需要解决的关键要点&#xff1a; 1&#xff09;当应用程序无法返回分配的内存时&#xff0c;就会发生内存泄漏&#xff0c;逐渐消…

JavaEE:线程池精讲

目录 一.什么是线程池 二.线程池的实现原理 &#x1f388;为什么要有工厂模式&#xff1f; 三.线程池的构造方法解读 &#x1f388;线程池的拒绝策略 四.自己实现一个线程池 一.什么是线程池 简单来说&#xff0c;线程池就好比一块鱼塘&#xff0c;鱼塘中的每条鱼就是一个线程…

如何在Eclipse中安装WindowBuilder插件,详解过程

第一步&#xff1a;找到自己安装eclipse的版本&#xff0c;在Help-关于eclipse里面&#xff0c;即Version 第二步&#xff1a;去下面这个网站找到对应的 link&#xff08;Update Site&#xff09;&#xff0c;这一步很重要&#xff0c;不然版本下载错了之后还得删除WindowBuil…