在做FAQ系统时,用户输入一个查询之后,返回若干个打好分数的文档。对于这些文档,有些是应该输出的,有些是不应该输出的。那么应该在什么地方截断呢?

这个问题其实是一个聚类问题,在一维空间中把若干个点聚成两类。
聚类就有标准:类内距离尽量小、类间距离尽量大。
由此想到Fisher准则。

那么给定一个浮点数组,寻找这个浮点数组的fisher点,应该如何实现呢?
fisher准则目标函数为fisher=(s1+s2)/(m1-m2)^2
可以用O(n)复杂度实现。

但是有没有更快速的方法呢?
从左往右扫描,如果fisher准则函数是一个类似二次函数的形状,那么就可以利用“三分法”求极值的策略将复杂度降为O(logN)。其实是不可能的,因为O(n)的方法优势在于快速计算目标函数fisher,如果使用三分法就无法O(1)复杂度计算目标函数fisher,而是O(n)的复杂度计算目标函数。这样其实复杂度反而提高了。所以这个问题到这里就可以停止了。但是“fisher曲线”到底是不是类似二次函数的呢?

为了验证是否满足“类似二次函数”的特性,我随机出一堆数字,求fisher曲线。
实验结果:并不满足“类似二次函数”,但是大概率地满足此条件。

本实验一共测试了10000组长度在3~1000之间的数组。
下面的0,1,2...表示曲线斜率方向变化次数,右面数字表示出现次数。
可以发现,那些 不满足“类似二次函数”的图像看上去也都近似“V”形。

0: 7668
1: 1732
2: 416
3: 129
4: 34
5: 17
6: 3
7: 1

实验代码如下:

import numpy as np
import tqdmdef getfisher(a):s = np.sum(a)ss = np.sum(a * a)now_s = 0now_ss = 0ret = []for i in range(len(a) - 1):now_s += a[i]now_ss += a[i] ** 2l_s = now_s / (i + 1)l_ss = now_ss / (i + 1)r_s = (s - now_s) / (len(a) - 1 - i)r_ss = (ss - now_ss) / (len(a) - 1 - i)fisher = (l_ss + r_ss) / (l_s - r_s) ** 2ret.append(fisher)return retdef checkright(a):dir = 0cnt = 0for i in range(1, len(a)):if dir != np.sign(a[i] - a[i - 1]) and dir != 0 and np.abs(a[i]-a[i-1])>1e-2:cnt += 1dir = np.sign(a[i] - a[i - 1])return cntdef main():c = dict()for i in tqdm.tqdm(range(10000)):x = np.sort(np.random.rand(np.random.randint(3, 1000)))f = getfisher(x)# plt.plot(x[:-1], f)cnt = checkright(f)if cnt not in c:c[cnt] = 0c[cnt] += 1# plt.show()print(c)if __name__ == '__main__':main()

转载于:https://www.cnblogs.com/weiyinfu/p/8343206.html

Fisher准则一维聚类相关推荐

  1. python函一维聚类_聚类实战:一维数组数据聚类

    大部分聚类方法针对的是多维数据,现实场景中还有可能存在以为数据的情况,针对以为数组的聚类和多维的数据有很大的不同,今天就来实战演练下: 需求内容:分析订单的价格分布 常见方案:按照100为梯度,分析不 ...

  2. K-means聚类K值的选择、Calinski-Harabasz准则

    K-means聚类K值的选择.Calinski-Harabasz准则 目录 K-means聚类K值的选择.Calinski-Harabasz准则 K-means聚类K值的选择 Calinski-Har ...

  3. 一维数组kmeans聚类c语言,一维数组的 K-Means 聚类算法理解

    刚看了这个算法,理解如下,放在这里,备忘,如有错误的地方,请指出,谢谢 需要做聚类的数组我们称之为[源数组] 需要一个分组个数K变量来标记需要分多少个组,这个数组我们称之为[聚类中心数组]及 一个缓存 ...

  4. 【模式识别】学习笔记(3)【Fisher线性判别】

    为什么80%的码农都做不了架构师?>>>    问题预备: 如果考虑把d维空间的样本投影到一条直线上,形成一维空间,即把维数压缩到一维. 然而: 1.即使样本在d维空间里形成若干紧凑 ...

  5. 贝叶斯聂曼准则matlab程序,模式识别试题及总结

    一. 填空与选择填空(本题答案写在此试卷上,30分) 1.模式识别系统的基本构成单元包括:  模式采集  .  特征提取与选择 和  模式分类   . 2.统计模式识别中描述模式的方法一般使用 特真矢 ...

  6. 【模式识别与人工智能】【实验报告合集】Bayes + Fisher + PCA + Decision Tree + KNN + K-Means + SVM

    目录 实验一  Bayes分类器设计 一.实验目的 二.实验原理 三.实验内容 四.实验要求 五.实验结果 六.实验分析 实验二  基于Fisher准则的线性分类器设计 一.实验目的 二.实验原理 三 ...

  7. Fisher 线性分类器--转

    原文地址:http://blog.csdn.net/htyang725/article/details/6571550 Fisher 线性分类器由R.A.Fisher在1936年提出,至今都有很大的研 ...

  8. 机器学习之Fisher线性分类器实现样本分类

    本次实验是本科阶段人工智能实验课的一个实验,当时划水没有仔细做,现在回来再实践一下. 1.Fisher分类器的基本原理 若把样本的多维特征空间的点投影到一条直线上,就能把特征空间压缩成一维.那么关 键 ...

  9. matlab fisher检验,FISHER线性判别MATLAB实现.doc

    FISHER线性判别MATLAB实现 Fisher线性判别上机实验报告 班级: 学号: 姓名: 算法描述 Fisher线性判别分析的基本思想:选择一个投影方向(线性变换,线性组合),将高维问题降低到一 ...

最新文章

  1. 股市币市:数据分析与交易所公告(20190226)
  2. PyTorch中文版官方教程来啦(附pdf下载)
  3. django小结191107
  4. mysql工程连接互通,MySQL容器与各种应用容器的互联互通
  5. gps测量与数据处理第三版pdf_测量培训需要掌握哪些知识点呢?_东英时代何老师...
  6. 部署ganglia3.7
  7. linux恢复表数据,Linux恢复误删的数据
  8. sql代码格式化_使用SQL格式化程序选项管理SQL代码格式化
  9. 怎样导入mysql驱动包_怎么导入MYSQL的驱动包
  10. apple script to 1s screen capture snapshot w/ windowsill
  11. 关于解决keil5中*** FATAL ERROR L250: CODE SIZE LIMIT IN RESTRICTED VERSION EXCEEDED的问题
  12. Elastic认证考试过程(2022.11.13 06:15)
  13. cJson使用的简单例子
  14. CISSP考试要求里的“应用密码学”内容辅助记忆趣味串讲
  15. 互联网寒冬——“大裁员”
  16. 《重构》第三章 - 读后感(发散、散弹、依恋)
  17. LicheePI (荔枝派)Zero 开发笔记(3):安装 GoAhead 5.2.0 并交叉编译在 LicheePI 上运行,增加自定义 Actions
  18. postgis+geoserver+openlayers最短路径分析-学习记录bug
  19. 4418. 选元素(动态规划)
  20. 输入一个N整数,结果为1 23 456 78910

热门文章

  1. 【转】30个你不可不知的CSS选择器
  2. MySQL用户管理和权限设置
  3. PHP-Java-Bridge使用笔记
  4. 第1章——操作系统概论
  5. Poj 1936,3302 Subsequence(LCS)
  6. Android中startActivity中的permission检测与UID机制
  7. Flash已死,有事烧纸!
  8. SuperMap.IS.AjaxScript之常用功能实现研究及使用
  9. 《剑指 Offer I》刷题笔记 11 ~ 19 题
  10. Linux系统管理(11)——linux下jdk的安装及环境变量配置