机器学习(七):梯度下降解决分类问题——perceptron感知机算法与SVM支持向量机算法进行二维点分类
实验2 感知机算法与支持向量机算法
一、预备知识
1.感知机算法

二、实验目的
掌握感知机算法的原理及设计;
掌握利用感知机算法解决分类问题。
三、实验内容
- 设计感知机算法求解,

- 设计SVM算法求解(可调用函数库),请找出支持向量和决策超平面。

四、操作方法和实验步骤
1.感知机算法求解
采用while循环判断当前权重w和截距b是否会产生误分类点,如果不产生误分类则直接返回w和b.
import numpy as np
def percep_classify_array(data_arr,label_arr,eta=0.1):
w=np.array([0,0])
b=0
m=len(data_arr)
error_data = True
while error_data: #利用收敛特性不采用迭代方式进行,采用while循环
error_data = False
for i in range(m):
judge = label_arr[i]*(np.dot(w,data_arr[i])+b)
if judge <=0:
error_data=True
w=w+eta*(label_arr[i]*data_arr[i])
b=b+eta*label_arr[i]
print('w=',w,'b=',b,'误分类点:x_'+str(i+1))
return w,b
input_vecs = [[-3,3],[-5,2],[2,4],[3,2]]
input_labels = [[1],[1],[-1],[-1]]
input_vecs = np.array(input_vecs)
input_labels = np.array(input_labels)
weight,bias = percep_classify_array(input_vecs,input_labels)
print('weight=',weight,'bias=',bias,'没有误分类点了')
结果:
w= [-0.3 0.3] b= [0.1] 误分类点:x_1
w= [-0.5 -0.1] b= [0.] 误分类点:x_3
weight= [-0.5 -0.1] bias= [0.] 没有误分类点了
2.SVM算法求解
import numpy as np
from sklearn import datasets
import matplotlib.pyplot as plt
class SVM:
def __init__(self, learning_rate=0.001,lambda_param=0.0001,n_iters=10000):
self.a=learning_rate
self.lambda_param=lambda_param
self.epoch=n_iters
self.w=None
self.b=None
def fit(self,X,y):
n_samples,n_features=X.shape
y_=np.where(y<=0,-1,1)
self.w=np.zeros(n_features)
self.b=0
for epoch in range(self.epoch):
for idx,x_i in enumerate(X):
condition=y_[idx]*(np.dot(x_i,self.w)-self.b)>=1
if condition:
self.w=self.w-self.a*(2*self.lambda_param*self.w)
else:
self.w=self.w-self.a*(2*self.lambda_param*self.w-np.dot(x_i,y_[idx]))
self.b=self.b-self.a*y_[idx]
def predict(self,X):
linear_output=np.dot(X,self.w)-self.b
return np.sign(linear_output)
#模拟数据
# X,y=datasets.make_blobs(n_samples=50,n_features=2,centers=2,cluster_std=1.05,random_state=40)
# y=np.where(y==0,-1,1)
#题目数据
X = np.array([[-3, 3], [-5, 2], [2, 4], [3, 2]])
y = np.array([1, 1, -1, -1])
clf=SVM()
clf.fit(X,y)
print(clf.w,clf.b)
def visualize_svm():
def get_hyperplane_value(x,w,b,v):
return (-w[0]*x-b+v)/w[1]
fig=plt.figure()
ax=fig.add_subplot(1,1,1)
plt.scatter(X[:,0],X[:,1],marker='o',c=y)
# x0_1=np.amin(X[:,0])
# x0_2=np.amax(X[:,0])
x0_1=-6
x0_2=6
x1_1=get_hyperplane_value(x0_1,clf.w,clf.b,0)
x1_2=get_hyperplane_value(x0_2,clf.w,clf.b,0)
x1_1_m=get_hyperplane_value(x0_1,clf.w,clf.b,-1)
x1_2_m=get_hyperplane_value(x0_2,clf.w,clf.b,-1)
x1_1_p=get_hyperplane_value(x0_1,clf.w,clf.b,1)
x1_2_p=get_hyperplane_value(x0_2,clf.w,clf.b,1)
ax.plot([x0_1,x0_2],[x1_1,x1_2],'r--')
ax.plot([x0_1,x0_2],[x1_1_m,x1_2_m],'b')
ax.plot([x0_1,x0_2],[x1_1_p,x1_2_p],'b')
plt.axhline(y=0, color='gray', linestyle='--')
plt.axvline(x=0, color='gray', linestyle='--')
# x1_min=np.amin(X[:,1])
# x1_max=np.amax(X[:,1])
# ax.set_ylim([x1_min-3,x1_max+3])
plt.xlim(-6, 6)
plt.ylim(-6, 6)
plt.show()
visualize_svm()
结果:
[-0.38987422 -0.05357053] 0.007

机器学习(七):梯度下降解决分类问题——perceptron感知机算法与SVM支持向量机算法进行二维点分类的更多相关文章
- 【机器学习】梯度下降 II
Gradient Descent 梯度下降 II 关于 Gradient Descent 的直观解释,参考上一篇博客[机器学习]梯度下降 I 本模块介绍几种梯度下降模型.定义符号标记如下: \(\th ...
- 机器学习-随机梯度下降(Stochastic gradient descent)
sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003& ...
- [深度学习] pytorch学习笔记(2)(梯度、梯度下降、凸函数、鞍点、激活函数、Loss函数、交叉熵、Mnist分类实现、GPU)
一.梯度 导数是对某个自变量求导,得到一个标量. 偏微分是在多元函数中对某一个自变量求偏导(将其他自变量看成常数). 梯度指对所有自变量分别求偏导,然后组合成一个向量,所以梯度是向量,有方向和大小. ...
- Matlab梯度下降解决评分矩阵分解
for iter = 1:num_iters %梯度下降 用户向量 for i = 1:m %返回有0有1 是逻辑值 ratedIndex1 = R_training(i,:)~=0 ; %U(i,: ...
- 斯坦福大学公开课机器学习:梯度下降运算的学习率a(gradient descent in practice 2:learning rate alpha)
本章节主要讲怎么确定梯度下降的工作是正确的,第二是怎么选择学习率α,如下图所示: 上图显示的是梯度下降算法迭代过程中的代价函数j(θ)的值,横轴是迭代步数,纵轴是j(θ)的值 如果梯度算法正常工作,那 ...
- 斯坦福大学公开课机器学习:梯度下降运算的特征缩放(gradient descent in practice 1:feature scaling)
以房屋价格为例,假设有两个特征向量:X1:房子大小(1-2000 feets), X2:卧室数量(1-5) 关于这两个特征向量的代价函数如下图所示: 从上图可以看出,代价函数是一个又瘦又高的椭圆形轮廓 ...
- 机器学习-随机梯度下降(Stochastic gradient descent)和 批量梯度下降(Batch gradient descent )
梯度下降(GD)是最小化风险函数.损失函数的一种常用方法,随机梯度下降和批量梯度下降是两种迭代求解思路,下面从公式和实现的角度对两者进行分析,如有哪个方面写的不对,希望网友纠正. 下面的h(x)是要拟 ...
- python机器学习——随机梯度下降
上一篇我们实现了使用梯度下降法的自适应线性神经元,这个方法会使用所有的训练样本来对权重向量进行更新,也可以称之为批量梯度下降(batch gradient descent).假设现在我们数据集中拥有大 ...
- [分类算法] :SVM支持向量机
Support vector machines 支持向量机,简称SVM 分类算法的目的是学会一个分类函数或者分类模型(分类器),能够把数据库中的数据项映射给定类别中的某一个,从而可以预测未知类别. S ...
- C语言基础:二维数组 分类: iOS学习 c语言基础 2015-06-10 21:42 16人阅读 评论(0) 收藏
二维数组和一位数组类似. 定义: 数据类型 数组名[行][列]={{ },{ }....}; 定义时,一维(行)的长度可以省略,但是二维(列)的长度不可以省略.但是访问时,一定使用双下标. 二维数组的 ...
随机推荐
- Windows10远程桌面连接CentOS7图形化桌面
Step1:在Centos7上检查是否安装了epel库 执行命令:rpm -qa|grep epel 示例: [root@master ~]# rpm -qa|grep epel[root@maste ...
- 登录:ORA-12504:TNS:监听程序在CONNECT_DATA中未获得SERVICE_NAME
问题描述:在用pl/sql登录soctt用户时,显示: 解决办法:在tnsnames.ora文件中添加(文件位置的查找方法见文章末尾) ORCL = (DESCRIPTION = (ADDRESS = ...
- 【Linux 中断】红外接收器设备驱动
一.概述 现在很多家电都使用了红外,而智能家居的诞生,连音响都带了红外遥控功能.为了解决家里遥控器比较多的情况,多数手机都支持了红外功能,这和以前的万能遥控器一样.这里主要记录红外接收的驱动,当然明白 ...
- 深入理解 Python 虚拟机:整型(int)的实现原理及源码剖析
深入理解 Python 虚拟机:整型(int)的实现原理及源码剖析 在本篇文章当中主要给大家介绍在 cpython 内部是如何实现整型数据 int 的,主要是分析 int 类型的表示方式,分析 int ...
- Mathematica处理若干个点电荷的电位电场的一个程序包
来自 Mathematica for Theoretical Physics Electrodynamics, Quantum Mechanics, General Relativity and Fr ...
- Eclipse安装和配置环境教程(图文详解)
前言 在上一篇文章中,壹哥给大家介绍了Notepad++这个更高级点的记事本,它进行Java开发相比windows自带的记事本要更方便一些.但是即便如此,用这种记事本进行Java开发效率依然很低.如果 ...
- Java 编程入门第一课:HelloWorld
在之前的文章中,壹哥带大家搭建出了 Java 的开发环境,配置了 JDK 环境变量,并且我们也熟悉了 dos 命令行的操作.那么从这篇文章开始,壹哥就开始带各位真正地学习 Java 代码该怎么写. - ...
- Python ArcPy批量掩膜、重采样大量遥感影像
本文介绍基于Python中ArcPy模块,对大量栅格遥感影像文件进行批量掩膜与批量重采样的操作. 首先,我们来明确一下本文的具体需求.现有一个存储有大量.tif格式遥感影像的文件夹:且其中除了 ...
- java多线程基础小白指南--线程的状态
线程的状态比较混乱,网上的资料也是五花八门,这时候就要参考 注意截图中的最后一句话,很多人把jvm中线程状态与实际上的os线程状态搞混了,所以才会有很多乱七八糟的状态出现. 注意Runnable其实含 ...
- linux服务器qps查询,查看当前linux服务器的QPS
https://blog.csdn.net/weixin_42119281/article/details/116595205 QPS:每秒查询率(QPS,Queries-per-second)是对一 ...