• 【机器学*】k*邻算法-02


    k邻*算法具体应用:2-2约会网站配对

      心得体会:

    1.对所有特征值进行归一化处理:将特征值单位带来的距离影响消除,使所有特征同权重——然后对不同的特征进行加权
    2.对于相互独立的特征,可以通过建立(特征值—类型 )图表进行计算,但是多个特征值是相互关联的则需要建立多维图表

    #2-2约会网站配对
    
    #将文本记录转换为NumPy
    def file2matrix(filename):
        love_dictionary = {'largeDoses':3, 'smallDoses':2, 'didntLike':1}
        fr = open(filename)     #打开文件
        arrayOLines = fr.readlines()    #行组成的数组
        numberOfLines = len(arrayOLines)    #返回数组元素个数
        returnMat = zeros((numberOfLines, 3))   #生成numberOfLines*3的0数组
        classLabelVector = []   #数组
        index = 0
        for line in arrayOLines:
            line = line.strip()     #除去头尾空格
            listFromLine = line.split('	')     #按'	'分割成数组
            returnMat[index, :] = listFromLine[0:3]     #从0开始截取3个
            if(listFromLine[-1].isdigit()):
                classLabelVector.append(int(listFromLine[-1]))  #是数字就放数字,存入类型
            else:
                classLabelVector.append(love_dictionary.get(listFromLine[-1]))  #是字符串就转成数字,存入类型
            index += 1
        return returnMat, classLabelVector
    
    
    import matplotlib
    import matplotlib.pyplot as plt
    fig = plt.figure() #返回一个图像窗口
    ax = fig.add_subplot(111) #在1行1列1号位画子图
    datingDataMat,datingLabels=file2matrix("E:/Python/《机器学*实战》代码/Ch02/datingTestSet2.txt")
    # print(datingLabels)
    # ax.scatter(datingDataMat[:,1], datingDataMat[:,2])
    #scatter(x, y, 点的大小, 颜色,标记)
    ax.scatter(datingDataMat[:,1], datingDataMat[:,2], 15.0*array(datingLabels),15.0*array(datingLabels),"*")
    ax.axis([-2,25,-0.2,2.0]) #[x轴min,x轴max,y轴min,y轴max]
    plt.xlabel('game')
    plt.ylabel('ice')
    # plt.show()
    
    # 归一化特征值
    # newVal=(oldVal-minVal)/(maxVal-minVal)
    def autoNorm(dataSet):
        minVals=dataSet.min(0) #得到每一列的最小值(列1min,列2min,列3min)
        maxVals=dataSet.max(0) #得到每一列的最大值
        ranges=maxVals-minVals
        normDataSet=zeros(shape(dataSet))# 建立一个和dataSet一样大小的0矩阵
        m=dataSet.shape[0]
        normDataSet=dataSet-tile(minVals,(m,1))# tile建立矩阵tile(重复的内容,(在高度上重复,在长度上重复))
        normDataSet=normDataSet/tile(ranges,(m,1))
        return normDataSet,ranges,minVals
    
    normMat,ranges,minVals=autoNorm(datingDataMat)
    
    #分类器
    def datingClassTest():
        hoRatio=0.10 #0.1的数据作为测试
        datingDataMat,datingLabels=file2matrix("E:/Python/《机器学*实战》代码/Ch02/datingTestSet2.txt")
        normMat,ranges,minVals=autoNorm(datingDataMat)#归一化的特征值,特征值原本范围,特征值最小值
        m=normMat.shape[0]
        numTestVecs=int(m*hoRatio)#测试数据的数量
        errorCount=0.0
        for i in range(numTestVecs):
            classifierResult=classify0(normMat[i,:],normMat[numTestVecs:m,:],datingLabels[numTestVecs:m],3)
            print("the classifier came back with:%d,the real answer is :%d"%(classifierResult,datingLabels[i]))
            if(classifierResult!=datingLabels[i]):
                errorCount+=1.0
        print("The total error rate is :%f"%(errorCount/float(numTestVecs)))
    
    #约会网站预测函数
    def classifyPerson():
        resultList=['not at all','in small doses','in large doses']
        percentTats=float(input("游戏时间百分比"))
        ffMiles=float(input("每年飞行常客里程数"))
        iceCream=float(input("每年吃冰淇淋多少升"))
        datingDataMat,datingLabels=file2matrix("E:/Python/《机器学*实战》代码/Ch02/datingTestSet2.txt")
        normMat,ranges,minVals=autoNorm(datingDataMat)
        inArr=array([ffMiles,percentTats,iceCream])
        classifierResult=classify0((inArr-minVals)/ranges,normMat,datingLabels,3)
        print(resultList[classifierResult-1])
    
    # classifyPerson()
    
    
    
  • 相关阅读:
    requests.session()发送请求 和使用requests直接发送请求的区别
    axios请求接口如何将data转换formdata?
    yaml简单使用
    Appium-send_keys 无法写入?
    Appium-滑动操作
    Appium -appium desktop工具使用
    Appium学习笔记(2)adb常用命令
    Appium学习笔记(1)appium配置-起步
    Django学习笔记(20)celery_tasks 异步任务初识
    Django学习笔记(19)HttpResponse/JsonResponse /render /redirect/Http404
  • 原文地址:https://www.cnblogs.com/LPworld/p/13268120.html
Copyright © 2020-2023  润新知