机器学习(1)k最近邻算法、朴素贝叶斯算法、聚类算法、

本文介绍了机器学习的基础算法,包括k最近邻(kNN)算法的原理和距离衡量方法,如欧氏距离和切比雪夫距离;朴素贝叶斯算法的概率基础知识与应用场景;以及聚类算法的类型,如层次聚类和K-means,并对比了聚类与分类的区别。通过这些内容,帮助读者理解机器学习中的基本概念和应用。
摘要由CSDN通过智能技术生成

k最近邻算法

1. 原理

  • 数据映射到高维空间中的点
  • 找出k个最近的样本
  • 投票结构

2.如何衡量距离

数学中距离满足三个要求

  • 必须为正数
  • 必须对称
  • 满足三角不等式

3.闵可夫斯基距离(Minkowski):

  • 汉哈顿距离
  • 欧氏距离
  • 切比雪夫距离

公式:


q越大,差异越大的维度对最终距离影响越大

q = 1时为曼哈顿距离

q = 2时为欧式距离

q无穷大时为切比雪夫距离

4.马氏距离

考虑数据分布

5.KNN分类实现的简单案例

from dataminer.baseClassifier.baseClassifier import BaseClassifier
from dataminer.mltools.stats.distance import Distance
import operator
class KNNClassifier(BaseClassifier):
    def __init__(self,traingfilesname,fieldsrols,delimiter,k=10):
        super(KNNClassifier,self).__init__(traingfilesname,fieldsrols,delimiter)
        self.k=k



    def _findNearestNeighbor(self,item):
        neighbors=[]
        for idx,onerecord in enumerate(self._data['prop']):
            distance=Distance.computeManhattanDistance(onerecord,item)
            neighbors.append([idx,distance,self._data['class'][idx]])

        neighbors.sort(key=lambda x:x[1])

        nearestk={}
        for i in range(self.k):
            nearestk.setdefault(neighbors[i][2],0)
            nearestk[neighbors[i][2]]+=1

        return nearestk

    def predicate(self,item):
        nearestk=self._findNearestNeighbor(item)
        ps=sorted(nearestk.items(),key=lambda x:x[1],reverse=True)
        return ps[0][0]
class Distance(object):
    @staticmethod
    def computeManhattanDistance(vector1,vector2,q=1):

        """

        :param vector1: [1,2,3,45,6]
        :param vector2: [1,2,4,56,7]
        :return:
        """
        distance=0.
        n=len(vector1)
        for i in range(n):
            distance +=pow(abs(vector1[i]-vector2[i]),q)
        return round(pow(distance,1.0/q),5)
    @staticmethod
    def computeEuDistance(vector1,vector2):
        return Distance.computeManhattanDistance(vector1,vector2,2)


朴素贝叶斯算法

1. 概率的基本性质

  • 事件的概率在0~1之间,即0<=P(A)<=1
  • 必然事件的概率为1
  • 不可能事件的概率为0
  • 概率的加法公式:P(A并B) = P(A) + P(B)(当事件A与B互斥时)
  • 事件B与事件A互为对立事件,P(A并B)=1.由加法公式得到P(A) =  1 - P(B)

2. 概率的基本知识

1)先验概率P(A)

2)后验概率(条件概率)P(A|B)

3)概率乘法公式:P(AB) = P(A) * P(B|A)

P(A|B) = P(A) * P(B|A) / P(B)

3. 全概率公式

P(B) = P(A1B + A2B + ··· + AnB)

4. 贝叶斯定理

P(Ak|B) = P(AkB) / P(B) (k = 1,2,···,n)


5. 应用场景:垃圾邮件过滤、新闻分类、金融风险识别

6. 

1)先验概率:事件A1, A2, ···, An看作是导致事件B发生的“原因”,在不知事件B是否发生的情况下,它们的概率为P(A1), P(A2), ···, P(An),通常称为先验概率。

2)后验概率:现在有了新的信息已知(B发生),我们对A1, A2, ··· An发生的可能性大小P(A1|B), P(A2|B), ···, P(An|B)有了新的估价,成为“后验概率”。

3)全概率公式看成“由原因推结果”,而贝叶斯公式的作用在于“由结果推原因”:现在一个“结果”A已经发生了,在众多可能的“原因”中,到底是哪一个导致了这一结果。故贝叶斯公式也称为“逆概公式”。

7. 代码案例:

from dataminer.baseClassifier.baseClassifier import BaseClassifier


class NativeBayesianClassifier(BaseClassifier):
    def __init__(self, datafilename, fieldroles, delimiter):
        super(NativeBayesianClassifier, self).__init__(datafilename, fieldroles, delimiter)
        self._postProb = dict()  # 条件概率,
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值