机器学习和数据挖掘(3):线性模型

2024-08-24 11:08

本文主要是介绍机器学习和数据挖掘(3):线性模型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

感知器模型

基本概念

线性可分:在特征空间中可以用一个线性分界面正确无误地分开两类样本;采用增广样本向量,即存 在合适的增广权向量 a 使得:

则称样本是线性可分的。如下图中左图线性可分,右图不可分。

所有满足条件的权向量称为解向量。权值空间中所有解向量组成的区域称为解区。

通常对解区限制:引入阈值threshold,要求解向量满足:

aTyithreshold>0,i[1,,N]

使解更可靠(推广性更强),防止优化算法收敛到解区的边界。

感知器算法(PLA)

算法目的

感知器算法由 Rosenblatt 提出,其主要功能是通过设计分类器来判别样本所属的类别;通过对训练样本集的学习,从而得到判别函数权值的解,产生线性可分的样本判别函数。该算法属于非参数算法,优点是不需要对各类样本的统计性质作任何假设,属于确定性方法。

感知器算法是非常好的二分类在线算法。该算法求取一个分离超平面,超平面由 wR 参数化并用来预测。对于一组数据(样本) X={x1,x2,x3...,xn} ,其中每一个 xi 代表了一个属性值,那么这个属性值所代表的属性的重要程度可能是不同的。我们用一组权重的向量代表每个属性的重要程度 W={w1,w2,w3...,wn} 。这样对每一组数据,感知器算法通过计算 y=(WTX) 来得到一个得分,他可能代表了一些具体含义,比如某客户的信用额度。那么当score与某一临界值作比较时,当score大于临界值时,就是正值表示的含义是发信用卡,当score小于该临界值时,就是负值表示不发信用卡,这样分类器就产生了。那么,我们最终通过计算 sign(y) 来预测标签,得到样本的分类。

h(x)=sign(i=1nwixithreshold)=sign(i=1nwixi+(threshold)(+1))=sign(i=1nwixi+w0x0)=sign(i=1nwixi)=sign(WTX)

相应的,在二维空间中,h(x)变成了如下形式

h(x)=sign(w0+w1x1+w2x2)

基本思想

以最简单的二分类问题为例,PLA算法的基本思想是,最开始的时候随便取得权重曲线 Wn ,这条曲线应用到已知的训练数据集中,算法仅在预测错误时修正权值 w 。如果正确的标签是y=1,那么权值修正为 w+x ;如果 y=1 ,权值变为 wx ,这时候我们去更新我们的曲线 Wn+1=Wn+ynxn

根据上图,由于权向量w是分割线的法向量,无论发生错误的点是正值还是负值,经过修正后的分割线调整了方向从而向错误点靠拢,就是说他更接近那条完美的分割线。算法的具体描述是:

from numpy import *def naive_pla(datas):w = datas[0][0]iteration = 0while True:iteration += 1false_data = 0for data in datas:t = dot(w, data[0])if sign(data[1]) != sign(t):error = data[1]  false_data += 1w += error * data[0]print 'iter%d (%d / %d)' % (iteration, false_data, len(datas))if not false_data:breakreturn w

可行性分析

想让PLA算法可停止,必须能够找到至少一条直线将训练数据集D划分成正值和负值两个部分,即必须有无错的权向量存在。这样的D我们称它为“线性可分”的。D线性可分是PLA停止的必要条件,那么他是充分条件吗?即如果D线性可分,PLA一定会停止吗?证明如下:

通俗的说就是,如果D里面的数据能划分,就一定能找到那条(其实有无数条)划分线;此时,在D里面随便选一个点,它一定处在划分线的某一侧(不是直线上),并且这一侧所有其他点的计算符号都与它相同,所以这些点到直线的距离大于零(不等式(1)的意义);根据这些条件得到不等式(2),它告诉我们权向量就像11点50的分针,近似目标向量就像同一时刻的时针,每一次修正,分针都离时针更近了!

但是上边的证明还不够完美,向量内积不仅反映了向量的角度还反映了其长度,两个向量就算夹角不变,只要长度变化,内积也可以增大!

不错,权向量的长度会怎么变化,推导如下

可以看到,修正之后权向量的长度,相较于修正之前的增加有一个上限,或者说它的长度增长是较慢的。这个上限由D中距离坐标原点最远的那个点决定。

缺点

  1. PLA的算法是局限在线性可分的训练集上的,然而我们拿到一个训练集,并不知道其到底是不是线性可分,如果不是,PLA的算法程序将无限循环下去,这样做是不可行的。

  2. 即使训练集是线性可分,我们也不知道PLA什么时候才能找到一个合适的解,如果要循环很多次才能找到,这对于实际使用是开销很大的。

改进 口袋算法(Pocket Algorithm)

对于那些有杂质的数据来说,要做到线性可分是非常困难的,因此我们采用的方法是找到一条直线,它是所有可能直线当中犯错误最少的?这是一个很难的问题,因为所含的直线太多了,你必须完整遍历一遍之后才能找到最优解,这是数学上的NP-hard问题。因此又提出了妥协的结果:口袋算法(Pocket Algorithm)。

import numpy as npdef pocket_pla(datas, limit):###############def _calc_false(vec):res = 0for data in datas:t = np.dot(vec, data[0])if np.sign(data[1]) != np.sign(t):res += 1return res###############w = np.random.rand(5)least_false = _calc_false(w)res = wfor i in xrange(limit):data = random.choice(datas)t = np.dot(w, data[0])if np.sign(data[1]) != np.sign(t):t = w + data[1] * data[0]t_false = _calc_false(t)w = tif t_false <= least_false:least_false = t_falseres = treturn res, least_false

同理,Pocket算法也有它自己的缺点:

  1. wt 是随机的,可能算了很多次都没有找出一个更好的。

  2. 假设数据一开始就是线性可分,那么这个算法找出来的未必是最好解,且时间花费也可能比较大。

这篇关于机器学习和数据挖掘(3):线性模型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1102304

相关文章

Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)

《Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)》:本文主要介绍Python基于火山引擎豆包大模型搭建QQ机器人详细的相关资料,包括开通模型、配置APIKEY鉴权和SD... 目录豆包大模型概述开通模型付费安装 SDK 环境配置 API KEY 鉴权Ark 模型接口Prompt

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

Retrieval-based-Voice-Conversion-WebUI模型构建指南

一、模型介绍 Retrieval-based-Voice-Conversion-WebUI(简称 RVC)模型是一个基于 VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的简单易用的语音转换框架。 具有以下特点 简单易用:RVC 模型通过简单易用的网页界面,使得用户无需深入了

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss