机器学习实战汇总

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_38358305/article/details/88992580

具体代码可以看github:代码github

Ch2:k - 近邻算法

一,k近邻算法的工作原理:

     存在一个样本数据集,也称作训练数据集,并且样本集中每个数据都存在标签,即我们知道样本集中每个数据与所属分类的对应关系。当输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似的数据的分类标签。一般来水,我们只选择样本数据集中最相似的k个数据(通常k不大于20),再根据多数表决原则,选择k个最相似数据中出现次数最多的分类,作为新数据的分类。

     k近邻算法的一般流程:
(1)收集数据:可以采用公开的数据源

(2)准备数据:计算距离所需要的数值

(3)分析数据:剔除垃圾信息

(4)测试算法:计算错误率

(5)使用算法:运用在实际中,对实际情况进行预测

二、实战

k近邻算法对未知类别属性的数据集中每个点依次执行如下步骤:
1)计算已知类别数据集中的点与当前点之间的距离

2)按照距离递增次序排序

3)选取与当前点距离最小的k个点

4)确定前k个点所在类别的出现频率

5)返回前k个点出现频率最高的类别作为当前点的预测分类

'''
使用 kNN 进行分类(约会网站配对)

@param inX:用于分类的数据向量
@param dataSet:训练样本集
@param labels:标签向量
@param k:用于选择最近邻的数目
'''
def classify0(inX, dataSet, labels, k):
    dataSetSize = dataSet.shape[0]
    # 求inX与数据集中各个样本的欧氏距离
    diffMat = tile(inX, (dataSetSize,1)) - dataSet   # np.tile 复制inX  4*1
    sqDiffMat = diffMat**2
    sqDistances = sqDiffMat.sum(axis=1)  # 按照x轴相加
    distances = sqDistances**0.5  
    sortedDistIndicies = distances.argsort()   # 从小到大排序后,返回索引
    # 字典,key存储第i小的标签值,value为标签的次数
    classCount = {}          
    for i in range(k):
        voteIlabel = labels[sortedDistIndicies[i]]  # 取第i个小的标签值
        classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1  # 根据标签统计标签次数,如果没找到返回0。统计前k个候选者中标签出现的次数
    sortedClassCount = sorted(classCount.items(), key=operator.itemgetter(1), reverse=True) # operator.itemgetter(1) 按照第2个元素,即标签出现的次数对classCount从大到小排序
    # print(sortedClassCount)  # 测试结果 [('B', 2), ('A', 1)]
    return sortedClassCount[0][0]  # 返回最终的类别,即标签值key

def createDataSet():
    group = array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])
    labels = ['A','A','B','B']
    return group, labels


# 测试kNN
group, labels = createDataSet()
ans = classify0([0,0], group, labels, 3)
print(ans)

Ch3:决策树

检测数据集中的每一个子项是否属于同一分类:

伪代码:

if so return 类标签;
else
      寻找划分数据集的最好特征
      划分数据集
      创建分支结点
            for 每个分支结点
                 调用函数createBranch并增加返回结点到分支结点中//递归调用createBranch()
      return 分支结点

我们可以总结出决策树的一般流程:

(1)收集数据

(2)准备数据:构造树算法只适用于标称型数据,因此数值型数据必须离散化

(3)分析数据

(4)训练数据:上述的构造树过程构造决策树的数据结构

(5)测试算法:使用经验树计算错误率

(6)使用算法:在实际中更好地理解数据内在含义

Ch4:基于概率论的分类方法:朴素贝叶斯

Ch5:Logistic 回归

梯度下降法更新权重:

Ch6:支持向量机

SMO算法

#SMO算法的伪代码
#创建一个alpha向量并将其初始化为0向量
#当迭代次数小于最大迭代次数时(w外循环)
    #对数据集中每个数据向量(内循环):
    #如果该数据向量可以被优化:
        #随机选择另外一个数据向量
        #同时优化这两个向量
        #如果两个向量都不能被优化,退出内循环
#如果所有向量都没有被优化,增加迭代次数,继续下一次循环

Ch7:利用 AdaBoost 元算法提高分类性能

Boosting 中最流行的的一个算法是 AdaBoost,以弱学习器作为基分类器,并且输入数据,使其通过权重向量进行加权。在第一次迭代中,所有数据等权重,在后续迭代中,前次迭代中分错的数据的权值增大,这种针对错误的调节能力正是 AdaBoost 的长处。

Ch8:预测数值型数据:回归

参考:

实战代码汇总

实战代码+理论

猜你喜欢

转载自blog.csdn.net/qq_38358305/article/details/88992580