统计学习之感知机算法

感知机的定义

  • 二分类线性分类模型,其输入为实例的特征向量,输出为实例的类别,取+1或者-1值。
  • 举例来说,平面坐标轴上的点有两类,在平面坐标轴画一条直线,把点分为两类。

编码实现

数据集
def loadData():
    x=np.array([[1,1],[1,2],[2,2],[3,4],[4,4],[4,3]])
    y=np.array([1,1,1,-1,-1,-1])
    return x,y
X,Y=loadData()
print(X[Y==1])
plt.scatter(X[Y==1][:,0],X[Y==1][:,1])
plt.scatter(X[Y==-1][:,0],X[Y==-1][:,1])
plt.show()

在这里插入图片描述

原始形式
def train(X,Y,iters=50):
    w=np.array([0]*X.shape[1])
    b=0
    eta=1
    for i in range(iters):
        print("第%d次迭代,w="%i,w,"b=%d"%b)
        flag=True
        for j in range(X.shape[0]):
            x=X[j]
            y=Y[j]
            if y*(sum(w*x)+b)<=0:
                w=w+eta*sum(y*x)
                b=b+eta*y
                flag=False
                break
        if flag:
            break
    return w,b
画出超平面
w,b=train(X,Y)
x1=0
y1=-(w[0]*x1+b)/w[1]
x2=5
y2=-(w[0]*x2+b)/w[1]
plt.scatter(X[Y==1][:,0],X[Y==1][:,1])
plt.scatter(X[Y==-1][:,0],X[Y==-1][:,1])
plt.plot([x1,x2],[y1,y2])
plt.show()

在这里插入图片描述

对偶形式
#在这里都采用了np.array,dot是矩阵乘法,*是点乘
def train(X,Y,iters=50):
    a=np.array([0]*X.shape[0])
    b=0
    eta=1
    G=np.array([[0]*X.shape[0] for i in range(X.shape[0])])
    for i in range(X.shape[0]):
        for j in range(X.shape[0]):
            #print(np.dot(X[i],X[j].T))
            G[i][j]=np.dot(X[i],X[j].T)
    print(G)   
    for i in range(iters):
        print("第%d次迭代,a="%i,a,"b=%d"%b)
        flag=True
        for j in range(X.shape[0]):
            x=X[j]
            y=Y[j]
            res=np.sum(a*Y*G[j])+b
            if y*res<=0:
                a[j]=a[j]+eta
                b=b+eta*y
                flag=False
                break
        if flag:
            break
    return np.dot(Y*a,X),b
画出超平面
w,b=train(X,Y)
x1=0
y1=-(w[0]*x1+b)/w[1]
x2=5
y2=-(w[0]*x2+b)/w[1]
plt.scatter(X[Y==1][:,0],X[Y==1][:,1])
plt.scatter(X[Y==-1][:,0],X[Y==-1][:,1])
plt.plot([x1,x2],[y1,y2])
plt.show()

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
感知机(Perceptron)和支持向量机(Support Vector Machine,SVM)都是用于分类和回归任务的机器学习模型,但它们在基本原理、实现方式和性能优化方面存在一些差异。 1. 基本原理:感知机是一种线性模型,用于二元分类。它基于感知器算法,通过连续调整权重和偏置项,使得神经元的输出始终为1(对于正类)或0(对于负类)。支持向量机是一种统计学习模型,主要用于高维数据的分类和回归任务。它通过最大化间隔(即支持向量与分类线之间的距离)来避免过拟合,并捕捉到数据的全局结构信息。 2. 实现方式:感知机通常通过迭代调整权重和偏置项来实现学习。训练数据集被分成训练集和测试集,通过反向传播算法不断优化模型参数。支持向量机通常使用核函数将原始数据映射到高维特征空间,然后在特征空间中计算间隔最大化。在实践中,有许多不同的核函数可供选择,如线性核、多项式核和高斯核等。 3. 性能优化:感知机的性能受到其学习算法的限制,通常只能处理线性可分的数据集。支持向量机通过使用间隔最大化作为目标函数,能够更好地处理非线性可分的数据集。此外,支持向量机还具有对噪声和异常值的鲁棒性,并且对参数的选择不太敏感。 4. 应用场景:感知机在二元分类和二元回归任务中得到了广泛应用,如手写数字识别、垃圾邮件过滤等。支持向量机则更广泛地应用于各种分类和回归任务,如文本分类、时间序列预测、生物信息学等。 总之,感知机和支持向量机在基本原理、实现方式、性能优化和应用场景方面存在差异。感知机是一种简单的线性模型,适用于二元分类任务;而支持向量机则能够处理更复杂的数据结构,并在高维数据中表现良好。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力搬砖的小王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值