Fisher准则一维聚类
在做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准则一维聚类相关推荐
- python函一维聚类_聚类实战:一维数组数据聚类
大部分聚类方法针对的是多维数据,现实场景中还有可能存在以为数据的情况,针对以为数组的聚类和多维的数据有很大的不同,今天就来实战演练下: 需求内容:分析订单的价格分布 常见方案:按照100为梯度,分析不 ...
- K-means聚类K值的选择、Calinski-Harabasz准则
K-means聚类K值的选择.Calinski-Harabasz准则 目录 K-means聚类K值的选择.Calinski-Harabasz准则 K-means聚类K值的选择 Calinski-Har ...
- 一维数组kmeans聚类c语言,一维数组的 K-Means 聚类算法理解
刚看了这个算法,理解如下,放在这里,备忘,如有错误的地方,请指出,谢谢 需要做聚类的数组我们称之为[源数组] 需要一个分组个数K变量来标记需要分多少个组,这个数组我们称之为[聚类中心数组]及 一个缓存 ...
- 【模式识别】学习笔记(3)【Fisher线性判别】
为什么80%的码农都做不了架构师?>>> 问题预备: 如果考虑把d维空间的样本投影到一条直线上,形成一维空间,即把维数压缩到一维. 然而: 1.即使样本在d维空间里形成若干紧凑 ...
- 贝叶斯聂曼准则matlab程序,模式识别试题及总结
一. 填空与选择填空(本题答案写在此试卷上,30分) 1.模式识别系统的基本构成单元包括: 模式采集 . 特征提取与选择 和 模式分类 . 2.统计模式识别中描述模式的方法一般使用 特真矢 ...
- 【模式识别与人工智能】【实验报告合集】Bayes + Fisher + PCA + Decision Tree + KNN + K-Means + SVM
目录 实验一 Bayes分类器设计 一.实验目的 二.实验原理 三.实验内容 四.实验要求 五.实验结果 六.实验分析 实验二 基于Fisher准则的线性分类器设计 一.实验目的 二.实验原理 三 ...
- Fisher 线性分类器--转
原文地址:http://blog.csdn.net/htyang725/article/details/6571550 Fisher 线性分类器由R.A.Fisher在1936年提出,至今都有很大的研 ...
- 机器学习之Fisher线性分类器实现样本分类
本次实验是本科阶段人工智能实验课的一个实验,当时划水没有仔细做,现在回来再实践一下. 1.Fisher分类器的基本原理 若把样本的多维特征空间的点投影到一条直线上,就能把特征空间压缩成一维.那么关 键 ...
- matlab fisher检验,FISHER线性判别MATLAB实现.doc
FISHER线性判别MATLAB实现 Fisher线性判别上机实验报告 班级: 学号: 姓名: 算法描述 Fisher线性判别分析的基本思想:选择一个投影方向(线性变换,线性组合),将高维问题降低到一 ...
最新文章
- 股市币市:数据分析与交易所公告(20190226)
- PyTorch中文版官方教程来啦(附pdf下载)
- django小结191107
- mysql工程连接互通,MySQL容器与各种应用容器的互联互通
- gps测量与数据处理第三版pdf_测量培训需要掌握哪些知识点呢?_东英时代何老师...
- 部署ganglia3.7
- linux恢复表数据,Linux恢复误删的数据
- sql代码格式化_使用SQL格式化程序选项管理SQL代码格式化
- 怎样导入mysql驱动包_怎么导入MYSQL的驱动包
- apple script to 1s screen capture snapshot w/ windowsill
- 关于解决keil5中*** FATAL ERROR L250: CODE SIZE LIMIT IN RESTRICTED VERSION EXCEEDED的问题
- Elastic认证考试过程(2022.11.13 06:15)
- cJson使用的简单例子
- CISSP考试要求里的“应用密码学”内容辅助记忆趣味串讲
- 互联网寒冬——“大裁员”
- 《重构》第三章 - 读后感(发散、散弹、依恋)
- LicheePI (荔枝派)Zero 开发笔记(3):安装 GoAhead 5.2.0 并交叉编译在 LicheePI 上运行,增加自定义 Actions
- postgis+geoserver+openlayers最短路径分析-学习记录bug
- 4418. 选元素(动态规划)
- 输入一个N整数,结果为1 23 456 78910