kmeans

2018秋招面试记录

你离开我真会死。 提交于 2021-02-16 10:59:06
作业帮笔试 leetcode 53 Maximum Subarray Given an integer array nums, find the contiguous subarray (containing at least one number) which has the largest sum and return its sum. Example: Input: [-2,1,-3,4,-1,2,1,-5,4], Output: 6 Explanation: [4,-1,2,1] has the largest sum = 6. class Solution { public: int maxSubArray(vector<int>& nums) { if (nums.empty()) { return -1; } int n = nums.size(); int max_val = nums[0]; int cur_max = 0; for (int i = 0; i < n; i++) { // 这样一来每次还会比较每个值的大小, 如果数组所有值为负数的话 cur_max += nums[i]; max_val = max(max_val, cur_max); cur_max = max(cur_max, 0); // 很优秀 } return max_val; } }

K-均值聚类算法

二次信任 提交于 2021-01-24 14:17:32
聚类是一种无监督的学习,它将相似的对象归到同一个簇中。 K-均值算法将数据点归为K个簇,每个簇的质心采用簇中所含数据点的均值构成。 K-均值算法 的工作流程:首先随机确定K个初始点为质心,然后将数据集中的每个点非配到一个簇中,分配原则是分给距离最近的质心所在的簇。然后每个簇的质心更新为该簇所有数据点的平均值。 伪代码: 随机创建K个质心: 当任意一个点的簇分配结果发生改变时: 对数据集中的每个数据点: 对每个质心: 计算质心到数据点的距离 将数据点分配给距离最近的质心所在簇 对每一个簇,计算簇中所有数据点的均值作为质心(更新质心) K-均值聚类支持函数:加载文件、欧式距离计算、随机初始化质心 from numpy import * def loadDataSet(filename): dataSet=[] f=open(filename) for line in f.readlines(): curLine=line.strip().split('\t') floatLine=list(map(float,curLine)) dataSet.append(floatLine) return dataSet def distEclud(vecA,vecB): return sqrt(sum(power(vecA-vecB,2))) def randCent(dataSet,k): n

K-均值聚类算法

坚强是说给别人听的谎言 提交于 2021-01-24 14:16:50
一.k均值聚类算法 对于样本集 。"k均值"算法就是针对聚类划分 最小化平方误差: 其中 是簇Ci的均值向量。从上述公式中可以看出,该公式刻画了簇内样本围绕簇均值向量的紧密程度,E值越小簇内样本的相似度越高。 工作流程: k-均值算法的描述如下: 创建k个点作为起始质心(通常随机选择) 当任意一个点的簇分配结果发生改变时: 对数据集中的每个点: 对每个质心: 计算质心与数据点之间的距离 将数据点分配到距离其最近的簇 对每一个簇,计算簇中所有点的均值并将均值作为质心 接下来是对于数据集testSet.txt的代码实现: 1.658985 4.285136 -3.453687 3.424321 4.838138 -1.151539 -5.379713 -3.362104 0.972564 2.924086 -3.567919 1.531611 0.450614 -3.302219 -3.487105 -1.724432 2.668759 1.594842 -3.156485 3.191137 3.165506 -3.999838 -2.786837 -3.099354 4.208187 2.984927 -2.123337 2.943366 0.704199 -0.479481 -0.392370 -3.963704 2.831667 1.574018 -0.790153 3

聚类 高维聚类 聚类评估标准 EM模型聚类

十年热恋 提交于 2021-01-24 13:01:31
高维数据的聚类分析 高维聚类研究方向 高维数据聚类的 难点 在于:   1、适用于普通集合的聚类算法,在高维数据集合中效率极低   2、由于高维空间的稀疏性以及最近邻特性,高维的空间中基本不存在数据簇。 在高维聚类的研究中有如下几个研究重点: 1)维度约简 ,主要分为特征变换和特征选择两大类。前者是对特征空间的变换映射,常见的有PCA、SVD等。后者则是选择特征的子集,常见的搜索方式有自顶向下、随机搜索等;( 降维 ) 2)高维聚类算法 ,主要分为高维全空间聚类和子空间聚类算法。前者的研究主要聚焦在对传统聚类算法的优化改进上,后者则可以看做维度约简的推广; 子空间聚类:   特征选择算法综述: http://www.cnblogs.com/heaad/archive/2011/01/02/1924088.html    不同的簇对应不同的子空间 ,并且每个子空间维数不同,因此也不可能一个子空间就可以发现所有的簇。选取与给定簇密切相关的维,然后在对应的子空间进行聚类。子空间聚类需要自定义一种搜索策略和评测标准来筛选出需要聚类的簇   传统的特征选择算法可以用来确定相关维。 CLIQUE算法(综合了基于密度和基于网格的算法)   CLIQUE把每个维划分成不重叠的区间,从而把数据对象的整个嵌入空间划分成单元。它使用一个密度阈值识别稠密单元和稀疏单元。如果映射到它的对象数超过该密度阈值

吴恩达《Machine Learning》精炼笔记 8:聚类 KMeans 及其 Python实现

走远了吗. 提交于 2021-01-15 13:10:13
作者:Peter 红色石头的个人网站: 红色石头的个人博客-机器学习、深度学习之路 ​ www.redstonewill.com 系列文章: 吴恩达《Machine Learning》精炼笔记 1:监督学习与非监督学习 吴恩达《Machine Learning》精炼笔记 2:梯度下降与正规方程 吴恩达《Machine Learning》精炼笔记 3:回归问题和正则化 吴恩达《Machine Learning》精炼笔记 4:神经网络基础 吴恩达《Machine Learning》精炼笔记 5:神经网络 吴恩达《Machine Learning》精炼笔记 6:关于机器学习的建议 吴恩达《Machine Learning》精炼笔记 7:支持向量机 SVM 本周的主要知识点是无监督学习中的两个重点:聚类和降维。本文中首先介绍的是聚类中的K均值算法,包含: 算法思想 图解K-Means sklearn实现 Python实现 无监督学习unsupervised learning 无监督学习简介 聚类和降维是无监督学习方法,在无监督学习中数据是没有标签的。 比如下面的数据中,横纵轴都是xx,没有标签(输出yy)。在非监督学习中,我们需要将一系列无标签的训练数据,输入到一个算法中,快速这个数据的中找到其内在数据结构。 无监督学习应用 市场分割 社交网络分析 组织计算机集群 了解星系的形成 聚类

标准化和归一化

孤人 提交于 2020-12-27 00:59:37
一、是什么? 1. 归一化   是为了将数据映射到0~1之间,去掉量纲的过程,让计算更加合理,不会因为量纲问题导致1米与100mm产生不同。   归一化是 线性模型 做数据预处理的关键步骤,比如LR,非线性的就不用归一化了。   归一化就是让不同维度之间的特征在数值上有一定比较性,可以大大提高分类器的准确性。 缺点: 这种方法有个缺陷就是当有新数据加入时,可能导致max和min的变化,需要重新定义 。 另外,最大值与最小值非常容易受异常点影响, 所以这种方法鲁棒性较差,只适合传统精确小数据场景 2. z-标准化   消除分布产生的度量偏差,例如:班级数学考试,数学成绩在90-100之间,语文成绩在60-100之间,那么,小明数学90,语文100,小花数学95,语文95,如何评价两个综合成绩好坏的数学处理方式。 二、怎么选? 1. 标准化 标准化更好保持了样本间距。当样本中有异常点时,归一化有可能将正常的样本“挤”到一起去。比如三个样本,某个特征的值为1,2,10000,假设10000这个值是异常值,用归一化的方法后,正常的1,2就会被“挤”到一起去。如果不幸的是1和2的分类标签还是相反的,那么,当我们用梯度下降来做分类模型训练时,模型会需要更长的时间收敛,因为将样本分开需要更大的努力!而标准化在这方面就做得很好,至少它不会将样本“挤到一起”。 标准化更符合统计学假设

特征工程之特征预处理

狂风中的少年 提交于 2020-10-21 02:02:55
    在前面我们分别讨论了特征工程中的特征选择与特征表达,本文我们来讨论特征预处理的相关问题。主要包括特征的归一化和标准化,异常特征样本清洗与样本数据不平衡问题的处理。 1. 特征的标准化和归一化      由于标准化和归一化这两个词经常混用,所以本文不再区别标准化和归一化,而通过具体的标准化和归一化方法来区别具体的预处理操作。     z-score标准化:这是最常见的特征预处理方式,基本所有的线性模型在拟合的时候都会做 z-score标准化。具体的方法是求出样本特征x的均值mean和标准差std,然后用(x-mean)/std来代替原特征。这样特征就变成了均值为0,方差为1了。在sklearn中,我们可以用StandardScaler来做z-score标准化。当然,如果我们是用pandas做数据预处理,可以自己在数据框里面减去均值,再除以方差,自己做z-score标准化。     max-min标准化:也称为离差标准化,预处理后使特征值映射到[0,1]之间。具体的方法是求出样本特征x的最大值max和最小值min,然后用(x-min)/(max-min)来代替原特征。如果我们希望将数据映射到任意一个区间[a,b],而不是[0,1],那么也很简单。用(x-min)(b-a)/(max-min)+a来代替原特征即可。在sklearn中,我们可以用MinMaxScaler来做max

新手一看就秒懂的数据挖掘的10大算法

狂风中的少年 提交于 2020-10-05 06:23:29
一个优秀的数据分析师,除了要掌握基本的统计学、数据库、数据分析方法、思维、数据分析工具技能之外,还需要掌握一些数据挖掘的思想,帮助我们挖掘出有价值的数据,这也是数据分析专家和一般数据分析师的差距之一。 数据挖掘主要分为分类算法,聚类算法和关联规则三大类,这三类基本上涵盖了目前商业市场对算法的所有需求。而这三类里又包含许多经典算法。市面上很多关于数据挖掘算法的介绍深奥难懂,今天就给大家用简单的大白话来介绍数据挖掘十大经典算法原理,帮助大家快速理解。 算法分类 连接分析:PageRank 关联分析:Apriori 分类算法:C4.5,朴素贝叶斯,SVM,KNN,Adaboost,CART 聚类算法:K-Means,EM 一、PageRank 当一篇论文被引用的次数越多,证明这篇论文的影响力越大。 一个网页的入口越多,入链越优质,网页的质量越高。 原理 网页影响力=阻尼影响力+所有入链集合页面的加权影响力之和 一个网页的影响力:所有入链的页面的加权影响力之和。 一个网页对其他网页的影响力贡献为:自身影响力/出链数量。 用户并不都是按照跳转链接的方式来上网,还有其他的方式,比如直接输入网址访问。 所以需要设定阻尼因子,代表了用户按照跳转链接来上网的概率。 比喻说明 1、微博 一个人的微博粉丝数不一定等于他的实际影响力,还需要看粉丝的质量如何。 如果是僵尸粉没什么用

标签传播算法(Label Propagation Algorithm, LPA)初探

≡放荡痞女 提交于 2020-08-18 21:14:36
0. 社区划分简介 0x1:非重叠社区划分方法 在一个网络里面,每一个样本只能是属于一个社区的,那么这样的问题就称为非重叠社区划分。 在非重叠社区划分算法里面,有很多的方法 : 1. 基于模块度优化的社区划分 基本思想是将社区划分问题转换成了 模块度函数 的优化,而模块度是对社区划分算法结果的一个很重要的衡量标准。 模块度函数在实际求解中无法直接计算得到全局最优解析解(类似深度神经网络对应的复杂高维非线性函数),所以通常是采用近似解法,根据求解方法不同可以分为以下几种方法: 1 . 凝聚方法(down to top): 通过不断合并不同社区,实现对整个网络的社区划分,典型的方法有Newman快速算法,CNM算法和MSG- MV算法; 2 . 分裂方法(top to down): 通过不断的删除网络的边来实现对整个网络的社区划分,典型的方法有GN算法; 3 . 直接近似求解模块度函数(近似等价解): 通过优化算法直接对模块度函数进行求解,典型的方法有EO算法; 2. 基于谱分析的社区划分算法 3. 基于信息论的社区划分算法 4. 基于标签传播的社区划分算法 undone Relevant Link: https: // www.cnblogs.com/LittleHann/p/9078909.html 1. Label Propagation简介

机器学习作业---K-Means算法

ε祈祈猫儿з 提交于 2020-08-17 18:23:56
--------------------------K-Means算法使用-------------------------- 一:数据导入及可视化 import numpy as np import matplotlib.pyplot as plt import scipy.io as sio data = sio.loadmat( " ex7data2.mat " ) X = data[ ' X ' ]   print(X.shape) plt.figure() plt.scatter(X[:, 0 ],X[:, 1 ],c= ' b ' ,marker= " o " ) plt.show() 注意:对于我们的无监督学习中,训练集中是没有标签值的,所以只有X,没有y 二:归类---寻找每个训练样本的聚类中心 (一)代码实现 def find_closest_centroids(X,centroids): m = X.shape[0] idx = np.zeros(m) #记录每个训练样本距离最短聚类中心最短的索引 idx = idx.astype(int) #因为numpy中没有int、float类型,是由系统决定是32、或者64位大小。所以我们这里手动设置位int类型,为后面做准备 for i in range(m): idx[i] = np.argmin(np.sum(np