机器学习实战(1)--KNN --约会网站

本文介绍了如何在约会网站上使用K近邻算法。首先从文本文件解析数据,然后用Matplotlib分析数据并进行归一化处理。接着,通过测试算法评估分类器性能,并构建了用于实际使用的命令行程序,帮助海伦判断潜在约会对象的匹配度。
摘要由CSDN通过智能技术生成


示例:在约会网站上使用k近邻算法

(1)收集数据:提供文本文件。

(2)准备数据: 使用python解析文本文件。

(3)分析数据:使用Matplotlib画二维扩散图。

(4)训练算法:此步驟不适用于k近邻算法。

(5)测试算法:使用海伦提供的部分数据作为测试样本。

测试样本和非测试样本的区别在于:测试样本是已经完成分类的数据,如果预测分类与实际类别不同,则标记为一个错误。

(6)使用算法:产生简单的命令行程序,然后海伦可以输入一些特征数据以判断对方是否为自己喜欢的类型。

准备数据:从文本文件中解析数据

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import numpy as np
import operator
from openpyxl.chart.label import DataLabel

def file2matrix(filename):
    #打开文件
    fr = open(filename)
    #读取文件所有内容
    arrayOfLines = fr.readlines()
    #文件行数
    numberOfLines = len(arrayOfLines)
    #创建特征矩阵
    returnMat = np.zeros((numberOfLines,3))
    #创建标签数组
    classLabelVector = []
    index = 0
    for line in arrayOfLines:
        #移除字符串头尾空格
        line = line.strip()
        #按'\t'切片
        listFromLine = line.split('\t')
        #把特征存放到特征矩阵中
        returnMat[index,:] = listFromLine[0:3]
        #标签分类并存放到标签数组
        if listFromLine[-1] == 'didntLike':
            classLabelVector.append(1)
        elif listFromLine[-1] == 'smallDoses':
            classLabelVector.append(2)
        elif listFromLine[-1] == 'largeDoses':
            classLabelVector.append(3)
        index += 1
    return returnMat, classLabelVector

if __name__=='__main__':
    dataMat, DataLabel = file2matrix('datingTestSet.txt')
    print(dataMat)
    print(DataLabel)
    

分析数据:使用使用Matplotlib画二维扩散图

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import numpy as np
import operator
from openpyxl.chart.label import DataLabel
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
import matplotlib.lines as mlines
from IPython.core.pylabtools import figsize

def file2matrix(filename):
    #打开文件
    fr = open(filename)
    #读取文件所有内容
    arrayOfLines = fr.readlines()
    #文件行数
    numberOfLines = len(arrayOfLines)
    #创建特征矩阵
    returnMat = np.zeros((numberOfLines,3))
    #创建标签数组
    classLabelVector = []
    index = 0
    for line in arrayOfLines:
        #移除字符串头尾空格
        line = line.strip()
        #按'\t'切片
        listFromLine = line.split('\t')
        #把特征存放到特征矩阵中
        returnMat[index,:] = listFromLine[0:3]
        #标签分类并存放到标签数组
        if listFromLine[-1] == 'didntLike':
            classLabelVector.append(1)
        elif listFromLine[-1] == 'smallDoses':
            classLabelVector.append(2)
        elif listFromLine[-1] == 'largeDoses':
            classLabelVector.append(3)
        index += 1
    return returnMat, classLabelVector

def showDatas(dataMat, dataLabel):
    #把画布分成4块,即2行2列,并设置画布大小
    fig, axs = plt.subplots(nrows=2, ncols=2,figsize=(12,8))
    #用matplotlib画图后,如果要添加汉字标签,比如设置汉字格式
    font = FontProperties(fname=r"c:\Windows\Fonts\simsun.ttc&#
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值