《机器学习》实战之分类

1.k-means

优点:精度高,对异常值不敏感,无数据输入假定

缺点:计算复杂度高,空间复杂度高

适用范围:数值型和标称型

最近的邻居
输入:inX:与现有数据集进行比较的向量(1xN)
数据集:大小m已知向量的数据集(NxM)
标签:数据集标签(1xM向量)
k:用于比较的邻居的数量(应该是奇数)
输出:最流行的类标签

创建数据集和标签:

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

分类:

def classify0(inX, dataSet, labels, k):

距离计算:
    dataSetSize = dataSet.shape[0]
    diffMat = tile(inX, (dataSetSize,1)) - dataSet
    sqDiffMat = diffMat**2
    sqDistances = sqDiffMat.sum(axis=1)
    distances = sqDistances**0.5


    sortedDistIndicies = distances.argsort()     
    classCount={}    

选择距离最小的k个点:     
    for i in range(k):
        voteIlabel = labels[sortedDistIndicies[i]]
        classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1

排序:
    sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True)
    return sortedClassCount[0][0]

 

def file2matrix(filename):

得到文件行数
    fr = open(filename)
    numberOfLines = len(fr.readlines())         #get the number of lines in the file

创建numpy矩阵
    returnMat = zeros((numberOfLines,3))        #prepare matrix to return
    classLabelVector = []                       #prepare labels return   
    fr = open(filename)

解析文件到数据列表:
    index = 0
    for line in fr.readlines():
        line = line.strip()
        listFromLine = line.split('\t')
        returnMat[index,:] = listFromLine[0:3]
        classLabelVector.append(int(listFromLine[-1]))
        index += 1
    return returnMat,classLabelVector

归一化特征值:

def autoNorm(dataSet):
    minVals = dataSet.min(0)
    maxVals = dataSet.max(0)
    ranges = maxVals - minVals
    normDataSet = zeros(shape(dataSet))
    m = dataSet.shape[0]
    normDataSet = dataSet - tile(minVals, (m,1))
    normDataSet = normDataSet/tile(ranges, (m,1))   #element wise divide
    return normDataSet, ranges, minVals

2.决策树:

优点:计算复杂度不高,输出结果易于理解,对中间值不敏感,可以处理不相关特征数据

缺点:可能会产生过度匹配的问题

适合数据类型:数组型和标称型

3.朴素贝叶斯

优点:在数据较少的情况下仍然有效,可以处理多类别问题

缺点:对于输入数据的准备方式较为敏感

适合数据类型:标称型数据

4.基于Logistics和Sigmoid函数的分类

优点:计算代价不高,易于理解和实现

缺点:容易欠拟合,分类精度可能不高

适合数据类型:数值型和标称型

5.SVM支持向量机

优点:泛化错误率低,计算开销不大,结果易解释

缺点:对参数调节和核函数的选择敏感,原始分类器不加修改仅适用于二分类问题。

适合数据类型:数值型和标称型

6.

 

 

©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页