机器学习(七):梯度下降解决分类问题——perceptron感知机算法与SVM支持向量机算法进行二维点分类

这篇具有很好参考价值的文章主要介绍了机器学习(七):梯度下降解决分类问题——perceptron感知机算法与SVM支持向量机算法进行二维点分类。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

实验2 感知机算法与支持向量机算法

一、预备知识

1.感知机算法

机器学习(七):梯度下降解决分类问题——perceptron感知机算法与SVM支持向量机算法进行二维点分类

二、实验目的

  1. 掌握感知机算法的原理及设计;

  2. 掌握利用感知机算法解决分类问题。

三、实验内容

  1. 设计感知机算法求解,
机器学习(七):梯度下降解决分类问题——perceptron感知机算法与SVM支持向量机算法进行二维点分类
  1. 设计SVM算法求解(可调用函数库),请找出支持向量和决策超平面。
机器学习(七):梯度下降解决分类问题——perceptron感知机算法与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()

结果:文章来源地址https://www.toymoban.com/news/detail-425807.html

[-0.38987422 -0.05357053] 0.007
机器学习(七):梯度下降解决分类问题——perceptron感知机算法与SVM支持向量机算法进行二维点分类

到了这里,关于机器学习(七):梯度下降解决分类问题——perceptron感知机算法与SVM支持向量机算法进行二维点分类的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 机器学习梯度下降法笔记

    梯度下降法(Gradient Descent)是一种常用的优化算法,用于在机器学习和深度学习中最小化或最大化一个函数的值。在机器学习中,梯度下降法常用于调整模型的参数,使得模型能够更好地拟合训练数据。 这个优化算法的基本思想是通过迭代的方式,不断调整参数的值,使得

    2024年02月15日
    浏览(47)
  • 梯度下降与机器学习的关系

    梯度下降是一种优化算法,常用于机器学习中的参数优化问题。在机器学习中,我们通常需要通过调整模型的参数来最小化损失函数,从而使模型能够更好地拟合数据。梯度下降算法通过不断迭代更新参数,沿着损失函数的负梯度方向移动,逐步接近最优解。 以下是梯度下降

    2024年02月22日
    浏览(43)
  • [机器学习] 1. 梯度下降 Gradient Descent 与随机梯度下降 Stochastic Gradient Descent

    ML Theory 太魔怔了!!!!! 从微积分课上我们学到 对一个 (mathscr C^2) 函数,其二阶泰勒展开的皮亚诺余项形式 [f(bm w\\\') = f(bm w) + langle nabla f(bm w), bm w\\\' - bm wrangle + o(|bm w\\\' - bm w|)] 这说明只要 (bm w\\\') 和 (bm w) 挨得足够接近,我们就可以用 (f(bm w) + langle nabla f(

    2024年02月08日
    浏览(54)
  • 初识机器学习——感知机(Perceptron)+ Python代码实现鸢尾花分类

      假设输入空间 χ ⊆ R n chisubseteq R^n χ ⊆ R n ,输出空间为 γ = { + 1 , − 1 } gamma=left { +1,-1right } γ = { + 1 , − 1 } 。其中每一个输入 x ⊆ χ xsubseteq chi x ⊆ χ 表示对应于实例的特征向量,也就是对应于输入空间(特征空间)的一个点, y ⊆ γ ysubseteq gamma y ⊆ γ 输出表

    2023年04月08日
    浏览(50)
  • 机器学习&&深度学习——随机梯度下降算法(及其优化)

    在我们没有办法得到解析解的时候,我们可以用过梯度下降来进行优化,这种方法几乎可以所有深度学习模型。 关于优化的东西,我自己曾经研究过智能排班算法和优化,所以关于如何找局部最小值,以及如何跳出局部最小值的一些基本思想是有感触的,随机梯度算法和其优

    2024年02月15日
    浏览(44)
  • 机器学习中为什么需要梯度下降

            在机器学习中,梯度下降是一种常用的优化算法,用于寻找损失函数的最小值。我们可以用一个简单的爬山场景来类比梯度下降的过程。         假设你被困在山上,需要找到一条通往山下的路。由于你是第一次来到这座山,对地形不熟悉,你只能通过尝试和

    2024年02月19日
    浏览(52)
  • 机器学习(二):线性回归之梯度下降法

    ✍ 作者简介: i阿极 ,CSDN Python领域新星创作者, 专注于分享python领域知识。 ✍ 本文录入于《机器学习案例》 ,本专栏精选了经典的机器学习算法进行讲解,针对大学生、初级数据分析工程师精心打造,对机器学习算法知识点逐一击破,不断学习,提升自我。 ✍ 订阅后,

    2023年04月22日
    浏览(48)
  • 机器学习中梯度下降法的缺点

    机器学习中的梯度下降法是一种寻找函数最小值的优化算法,广泛应用于训练各种模型,尤其是在深度学习中。尽管其应用广泛,但梯度下降法也存在一些不可忽视的缺点: 1. 局部最小值和鞍点 局部最小值问题:  对于非凸函数,梯度下降法可能会陷入局部最小值,而不是

    2024年02月20日
    浏览(42)
  • 机器学习--决策树、线性模型、随机梯度下降

    🤵‍♂️ 个人主页:@Lingxw_w的个人主页 ✍🏻作者简介:计算机科学与技术研究生在读 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+    目录  一、决策树 二、线性模型 三、随机梯度下降 决策树(decision

    2024年02月03日
    浏览(43)
  • 机器学习_通过梯度下降找到最佳参数

    所谓训练机器,也称拟合的过程,也就是 确定模型内部参数的过程 。具体到线性模型,也就是确定y’=wx+b 函数中的w和b。 对于线性回归来说,针对损失函数的 梯度下降 (gradient descent )方法可以使猜测沿着 正确的方向前进 ,因此总能找到比起上一次猜测时 误差更小的w和b组

    2024年01月21日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包