zoukankan      html  css  js  c++  java
  • 读书笔记《集体智慧编程》Chapter 8 : Build Price Models

    本文概要

    贝叶斯分类器 ,决策数和支持向量机对数值型数据处理能力较弱。本文介绍kNN(K Nearst Neighbor)算法,可以根据已有的数值型训练集合,对数值型数据做出预测。

    KNN算法

    正对当前被预测对象,在训练集合中找出最近的K个物品价格,算出平均值为预测价格。距离算法有很多,如皮尔森系数,余弦定理,欧氏距离等。本章例子是预测商品价格,采用的是欧氏距离(为什么呢?我的理解:商品的价格一般与商品重量,体积等成正比,所以距离的模大小比较重要,采用欧拉距离,可以将向量摸大小的因素考虑在内)。

    K的选取

    算法中有K的,都会遇到这个问题,k取多少?在KNN中,k太小,比如1,那么预测价格仅仅与最临近的训练数据相同,那么可能此数据由于噪音,不准确,使得预测数据也不准确。K太大了,也不好,因为范围太大,较小的值容易使整体预期偏低。

    权重距离

    K太多时,由于范围太大,较远的值会使总体预期偏低,那么可以采用加权平均值的思想,给较远的对象较低的权重,这样可以给出相对准确的预期。权重公司应该是一个单调递减函数,参数为距离,值为权重。有三种权重计算公司:

    • 权重函数1: 反函数,f(dist) = 1/(1+dist),分母加1是为了防止无限大。优点:计算快。缺点:较近的数据,给与较大的权重,权重降落的非常快,导致可能会对噪音数据比较敏感。
    • 权重函数2: 减函数,f(dist) = a - dist (dist < a) or 0 (dist >= a)。a为大于0的常量。优点,计算快。缺点:距离大于a的数值给出的权重是0,无法对预估起到作用,可能会漏掉一些数据。
    • 权重函数3: 高斯函数(如下图),当可距离无限延伸时,权重是无限接近于0的,但是当距离叫小时,权重变化相对平稳,所以对上面两种函数的不足都有弥补。不足的是,计量量较大。

    image

     

    交叉验证 cross validation

    数据集被分为两份

    • train set: 训练集合,用于训练算法,通常较大,如95%左右。
    • test set:测试集合,通常较小,如5%左右。测试集合输入带入算法中,计算的结果对应的测试结果只差的平方(放大差异),求和,就可以作为验证分数。

    通常需要重复上面的切分过程。使用这个方法进行验证需要满足一个条件,被验证算法需要输入训练数据集。

    伸缩纬度

    物品通常是由多为向量描述的,然而由于不同纬度变量描述特质不同,对整体影响也不一样。比如酒,由年份(范围0~100),级别(范围1~5),体积(范围500ml~2500ml)。可以看出,在欧式距离中,体积的影响最大。所以,需要将所有的酒的体积统一缩小,人为的给出一个伸缩比例,使得不同的纬度对距离的贡献相当。可以利用第五章中提到的优化方案自动求出最优伸缩比例。

    不均匀的价格分布

    有可能训练集合的数据有些因数并不能被对象的纬度描述出来,如果仍然这样计算,可能会低估预期。可以换一个角度预测,预测价格在一个范围区间内的概率。计算方法与knn类似,只不过将区域内的权重之和比上所有的权重之和,结果为概率。

    KNN使用场景

    距离计算耗时,最优范围选取耗时。

    但是数值型预测,范围预测,其他预测方法都办不到,kNN比较直观且可行。

    声明:如有转载本博文章,请注明出处。您的支持是我的动力!文章部分内容来自互联网,本人不负任何法律责任。
  • 相关阅读:
    命令创建.net core3.0 web应用详解(超详细教程)
    安装Visual Studio Code并汉化
    Visual Studio2019及.NET CORE3.0的安装教程
    序列化对象设置字段首字母小写(驼峰命名法)
    解决锁定图层后不能淡显的问题
    C#中的委托和事件
    C#常用方法——委托和事件详解
    C#常用方法——List<T>泛型列表解析
    C#常用方法——strng.Format()和$用法详解
    C#常用方法——通过WebServices接口读取json字符并解析示例
  • 原文地址:https://www.cnblogs.com/bourneli/p/2779738.html
Copyright © 2011-2022 走看看