机器学习-分类-线性分类器

在一个机器学习任务中,如果每一条数据的目标值是离散的,则该任务是一个分类任务。

解决分类问题基本的方法有:线性分类器、决策树、朴素贝叶斯、人工神经网络、K近邻(KNN)、支持向量机(SVM);

组合基本分类器的集成学习算法:随机森林、Adaboost、Xgboost等。

一、线性分类器

线性分类器=假设函数+损失函数,假设函数是原始图像数据到类别的映射;

使用线性分类器分类的问题可以转化为最优化问题:通过更新假设函数的参数值来最小化损失函数的值,从而找到最优解。

在线性分类器中,输出是输入的加权和。

常用的线性分类器有:基本线性分类器、最小二乘线性分类器、感知器、逻辑回归分类器。

1.基本线性分类器

原理:

(1)计算目标值为1的所有正例数据的重心和目标值为0的所有负例数据的重心。

(2)计算与正例重心与负例重心距离相等的超平面。

过程:

(1)对训练集中目标值为1的正例逐个属性求均值,得到正例重心;对训练集中目标值为0的负例逐属性求均值,得到负例重心。

(2)正例重心和负例重心相减得到权重向量\omega

(3)将正例重心和负例重心相加除以2得到中点C。

(4)将T={\omega}^{T}C作为分类阈值。对测试集的每个样本x与权重做点乘,若大于T,则分为1;否则分为0。

 python代码:

#1.基本线性分类器
class BaseLinearClassifier:
    def __init__(self,w=np.zeros((20,1))):
        #私有属性不允许继承
        self.weight=w
        
    #查看权重系数
    @property
    def get_weight(self):
        return self.weight
    
    #训练函数
    def fit(self,xtrain,ytrain):
        #得到正例索引
        index1=np.where(ytrain==1)
        #得到正例重心
        #axis=0表示“压缩行”,对各列求均值,最终得到1*n矩阵。
        pos_centriod=np.mean(xtrain[index1[0]],axis=0)
        
        #得到负例索引
        index2=np.where(ytrain==0)
        #得到负例重心
        neg_centriod=np.mean(xtrain[index2[0]],axis=0)

        #得到权重向量
        self.weight=pos_centriod-neg_centriod
        
        #计算阈值
        T=np.dot(self.weight,1/2*(pos_centriod+neg_centriod))
        
        return T
    
    #准确率测试
    def score(self,xtest,ytest,threshold):
        #测试集预测的类别
        predict=[]
        
        for i in xtest:
            #若大于阈值,则返回类别1
            if np.dot(i,self.weight)>=threshold:
                predict.append(1)
            #若小于阈值,
  • 6
    点赞
  • 77
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值