• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
导航菜单
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • windows
  • 服务器硬件
  • 服务器运维
  • 云计算
  • 虚拟化
  • IIS教程
  • Linux
  • Apache
  • Ftp
  • DNS
  • Nginx
您的位置:首页 > 服务器 >云计算 > 机器学习--k-近邻(kNN)算法案例,--k-knn

机器学习--k-近邻(kNN)算法案例,--k-knn

作者:网友 字体:[增加 减小] 来源:互联网

本文主要包含机器学习--k-近邻(kNN)算法案例,--k-knn等服务器相关知识,网友希望可以进行参考

机器学习--k-近邻(kNN)算法案例,--k-knn


一、改进约会网站的配对效果

       想要预测的目标变量:不喜欢的人、魅力一般的人、极具魅力的人

       样本特征:每年获得的飞行常客里程数、玩视频游戏所耗时间百分比、每周消费的冰淇淋公升数

       约会数据信息存放在文本文件datingTestSet.txt中,每个样本数据占据一行,共有1000行。

 

实现步骤

1、将文本文件中的数据进行解析

###################################
#功能:将文本文件中的数据解析为矩阵形式
#输入变量:filename 文件名字符串
#输出变量:return_mat, class_label_vector 文件转换后的矩阵, 类标签向量
###################################


def file2matrix(filename):
    fr = open(filename, 'r')  # 只读方式打开文件
    array_of_lines = fr.readlines()  # readlines()来读取所有数据,这样可以尽快释放文件资源
    number_of_lines = len(array_of_lines)  # 得到文件行数
    return_mat = zeros((number_of_lines, 3))  # 创建返回矩阵

    class_label_vector = []
    index = 0

    label_dict = {'largeDoses': 3, 'smallDoses': 2, 'didntLike': 1}

    # readlines()读取整个文件并以行构成一个列表,每行作为for的一个循环
    for line in array_of_lines:

        #先去除字符串两边的空格,再以tab分隔符分切字符串
        list_form_line = line.strip().split('\t')

        return_mat[index, :] = list_form_line[0:3]  # 替代每行数据

        # 使用负下标选取list_form_line最后一列
        # 即把三种类型的人数添加到class_label_vector列表中
        class_label_vector.append(label_dict[list_form_line[-1]])

        index += 1
    return return_mat, class_label_vector

 

2、归一化特征值

在处理不同取值范围的特征值时,为了避免权重失衡,通常会对数值进行归一化处理,此函数可以自动将数字特征值转化为0到1的区间。

###################################
#功能:对数值进行归一化处理
#输入变量:data_set 样本数据
#输出变量:norm_data_set, ranges, min_vals 归一化后的样本,取值范围,最小值
###################################
def auto_norm(data_set):
    min_values = data_set.min(0)  # 参数0使得函数可以从列中选取最小值,而不是选取当前行的最小值
    max_values = data_set.max(0)

    ranges = max_values - min_values

    m = data_set.shape[0]  # 获得数组的行数
    diff_data_set = data_set - tile(min_values, (m, 1))
    norm_data_set = diff_data_set/tile(ranges, (m, 1))  # 对应数值进行相除

    return norm_data_set, ranges, min_values

 

3、利用约会网站数据测试分类器效果

机器学习算法一个很重要的工作就是评估算法的正确率,通常用已有数据的90%作为训练样本,其余的10%数据去测试分类器。需要注意的是,10%的数据应该是随机选择的。对于分类器来说,错误率是检测性能的指标。错误率是错误结果的次数除以测试数据的总数,完美分类器错误率为0,而错误率为1.0的分类器不会给出任何正确的分类结果。

 

###################################
#功能:测试分类器的效果
###################################
def dating_class_test():
    ho_ratio = 0.10  # 测试数据占的百分比

    dating_data_mat, dating_labels = file2matrix('datingTestSet.txt')
    norm_mat, ranges, min_values = auto_norm(dating_data_mat)

    m = norm_mat.shape[0]
    num_test_vectors = int(m*ho_ratio)  # 10%的数据作为测试

    error_count = 0.0
    for i in xrange(num_test_vectors):
        classifier_result = classify0(norm_mat[i, :], norm_mat[num_test_vectors:m, :],
                                      dating_labels[num_test_vectors:m], 3)
        print "the classifier came back with: %d, the real answer is: %d" % \
              (classifier_result, dating_labels[i])

        if classifier_result != dating_labels[i]:
            error_count += 1.0
    print "the total error rate is: %f" % (error_count/num_test_vectors)

 

4、从错误率来看,分类器的性能还不错,接下来将利用该分类器来预测喜欢程度

 

###################################
#功能:输入某人的信息,得出对对方喜欢程度的预测值
###################################
def classify_person():
    result_list = ['not at all', 'in small doses', 'in large doses']

    # 飞行常客里程数
    ff_miles = float(raw_input("frequent flier miles earned per year:"))
    # 玩视频游戏所耗时间百分比
    percent_tats = float(raw_input("percentage of time spent playing video games:"))
    # 每周消费的冰淇淋公升数
    ice_cream = float(raw_input("liters of ice cream consumed per week:"))

    dating_data_mat, dating_labels = file2matrix('datingTestSet.txt')
    norm_mat, ranges, min_values = auto_norm(dating_data_mat)

    in_arr = array([ff_miles, percent_tats, ice_cream])
    classifier_result = classify0((in_arr-min_values)/ranges, norm_mat, dating_labels, 3)

    print "you will probably like this person: ", result_list[classifier_result - 1]

 

二、手写识别系统

        将手写字符看成由0、1组成的32行32列的一个二进制图像文件,手写字符是数字0到9。由此可知,

        想要预测的目标变量:0到9的数字

        样本特征:无

        手写文本数据有两个子目录:目录trainingDigits中包含了大约2000个例子,每个例子的内容是0到9的数字图像,每个数字有大约200个样本;目录testDigits中包含了大约900个测试数据。使用trainingDigits中的数据训练分类器,使用testDigits中的数据测试分类器效果。

 

实现步骤:

1、将图像文件的数据转为向量,把32*32的二进制图像矩阵转为1*1024的向量,这样分类器就可以处理数字图像信息了。

 

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 机器学习--k-近邻(kNN)算法案例,--k-knn

相关文章

  • ElasticSearch的分布式安装
  • Sqoop导入数据到Hadoop代理执行,sqoophadoop
  • elasticsearch JAVA客户端操作---搜索的过滤、分组高亮,elasticsearchjava
  • redshift的约束策略,redshift约束策略
  • Sqoop工具,sqoop安装
  • RegionServer功能职责,regionserver职责
  • 《转》OpenStack Keystone的基本概念理解,《转》openstack
  • LXC学习,学习中国app上线
  • Hadoop之——有趣问答(一),hadoop问答
  • MapReduce处理表的自连接,mapreduce处理表

文章分类

  • windows
  • 服务器硬件
  • 服务器运维
  • 云计算
  • 虚拟化
  • IIS教程
  • Linux
  • Apache
  • Ftp
  • DNS
  • Nginx

最近更新的内容

    • 开源图计算框架GraphLab介绍,开源图框架graphlab
    • Understanding Cubert Concepts 之 BLOCK(一),cubertconcepts
    • 关于Openstack的浅层次认知,openstack认知
    • 2015 OpenCloud峰会总结,2015opencloud峰会
    • MapReduce对输入多文件的处理,mapreduce输入处理
    • OSTC 2015,ostc2015
    • spark_RDD数据操作
    • The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path,httpservlet
    • HDP 2.2.4 Hue Oozie Editor生成workflow.xml的几点问题,oozieworkflow.xml
    • Cloud Foundry安装部署指南(下),cloudfoundry

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有