统计学习方法——实践

看书结合python实现的博客学习:

  • 李航《统计学习方法》第二章——用Python实现感知器模型(MNIST数据集)

  • 李航《统计学习方法》第三章——用Python实现KNN算法(MNIST数据集)

  • 李航《统计学习方法》第四章——用Python实现朴素贝叶斯分类器(MNIST数据集)

  • 李航《统计学习方法》第五章——用Python实现决策树(MNIST数据集)

  • 李航《统计学习方法》第六章——用Python实现逻辑斯谛回归(MNIST数据集)

  • 李航《统计学习方法》第六章——用Python实现最大熵模型(MNIST数据集)

  • 李航《统计学习方法》第七章——用Python实现支持向量机模型(伪造数据集)

  • 李航《统计学习方法》第八章——用Python+Cpp实现AdaBoost算法(MNIST数据集)

  • 李航《统计学习方法》第十章——用Python实现隐马尔科夫模型

学习记录:

1.感知机模型:

    放在二维空间,感知机模型就是找到一条直线,把二元类别隔离开(放到三维空间或者更高维的空间,感知机的模型就是尝试找到一个超平面,能够把所有的二元类别隔离开)
    1.感知机模型
        分离超平面(对于输入实例给出输出类别)
    2.感知机学习策略
        在假设空间中选取使损失函数最小的模型参数。(损失函数对应于误分类点到分离超平面总距离)
    3.感知机学习算法
        * 梯度下降法
        * 算法的收敛性(有限次搜索能够得到将训练数据完全正确分开的分离超平面,并且有很多解)
        * 原始形式:取一个超平面,利用SGD不断极小化目标函数,一次迭代只使用一个误分类点使其梯度下降
        * 对偶形式:通过x,y反过来求解参数,通过实例点迭代,更新次数越多说明离超平面越近,这个点则越难分类????
    4.实现理解
        Train(trainset,train_labels):
        while True:
            yi = 1/-1 因为是二分模式,所以图片是1时label为1, 2/3/4..时label是0,对应的yi=1, 否则yi=-1
            result = yi * (np.dot(img,w) + b)  从b=0,w=np.zeros((feature_length,1))开始,dot为点积
            if result <= 0:
                w += img*yi*study_step  study_step为自定义步长
                b += yi*study_step
        循环停止条件:连续m次result都大于0/学习次数大于n----m,n均为自定义    
        最后输出w,b

2.KNN算法

    输入向量对应于特征空间的点,输出为实例的类别。
    给定训练集,实例类别已定,分类时,对于新的实例,通过多数表决等方式进行预测
    1.模型
        距离度量,K值得选择和分类决策规则
    2.实现
        KD树
    3.实现理解
        没有训练直接预测
        Predict(testset,trainset,train_labels)
            for test in testset:
                获取train前k个当做中心点,保存为knn_list[(距离,label),().....],距离为k点与test点的欧式距离
                遍历余下k~len(train_labels)的训练数据,与test的距离如果小于knn_list中最大的dist(因为从最大距离的开始被替换掉),则替换为新的(dist,label)
                最后计算knn_list中频率最高的label为此test的预测label

3. 朴素贝叶斯

    朴素贝叶斯法:给定训练集,基于特征条件独立假设输入输出的联合概率,然后基于此模型,求出后验概率最大的输出y
    1.朴素:对条件概率分布做了条件独立性假设(一个样本出现的概率是其所有特征出现概率的联乘)
    2.先验概率是指根据以往经验和分析得到的概率,如全概率公式,它往往作为"由因求果"问题中的"因"出现的概率。
在贝叶斯统计推断中,不确定数量的先验概率分布是在考虑一些因素之前表达对这一数量的置信程度的概率分布。
例如,先验概率分布可能代表在将来的选举中投票给特定政治家的选民相对比例的概率分布。未知的数量可以是模型的参数或者是潜在变量。
    3.后验概率最大化:期望风险函数最小化
    4.朴素贝叶斯的参数估计
        * 极大似然估计
        * 学习与分类算法
        * 贝叶斯估计
    5.实现理解:
        1.训练先验概率:np.zeros(10),然后存每个数字出现的次数
        2.训练条件概率:np.zeros((10,784,2)),存入数字x在第y像素是黑的次数和是白的次数-->再0/1+0,1/0+1 得到概率
        3.预测:probability *= int(条件概率矩阵[for数字n][for第i像素][img[i]]),相乘之后得到probability最大的数字n就是预测结果

你可能感兴趣的:(人工智能)