手写KMeans算法】的更多相关文章

KMeans算法是一种无监督学习,它会将相似的对象归到同一类中. 其基本思想是: 1.随机计算k个类中心作为起始点. 将数据点分配到理其最近的类中心. 3.移动类中心. 4.重复2,3直至类中心不再改变或者达到限定迭代次数. 具体的实现如下: from numpy import * import matplotlib.pyplot as plt import pandas as pd # Load dataset url = "https://archive.ics.uci.edu/ml/mac…
作为聚类的代表算法,k-means本属于NP难问题,通过迭代优化的方式,可以求解出近似解. 伪代码如下: 1,算法部分 距离采用欧氏距离.参数默认值随意选的. import numpy as np def k_means(x,k=4,epochs=500,delta=1e-3): # 随机选取k个样本点作为中心 indices=np.random.randint(0,len(x),size=k) centers=x[indices] # 保存分类结果 results=[] for i in ra…
效果展示 这不是OCR,有些人可能会觉得这东西会和OCR一样,直接进行整个字的识别就行,然而并不是. OCR是2维像素矩阵的像素数据.而手写识别不一样,手写可以把用户写字的笔画时间顺序,抽象成一个维度.这样识别的就是3维的数据了.识别起来简单很多. 最近需要做一个中文手写识别算法.搜索了网上的一些前人作品,发现都是只讲了理论,不讲实际开发.于是打算自己开发一个,并记录开发过程. 由于代码量比较多,这里不会全部贴上来讲解,代码已经放到了gitee,部分地方需对照代码进行观看,下面有URL. 思路…
导入库 import numpy as np from sklearn import datasets import matplotlib.pyplot as plt 导入数据 iris = datasets.load_iris() 数据准备 X = iris.data y = iris.target X.shape, y.shape ((150, 4), (150,)) 数据分割(28开) # 因为训练集矩阵和标签向量是分割的,不能单独对某一个进行乱序# 需要将其合并整体乱序再分割 X_joi…
1. K-means++原理 K均值聚类属于启发式方法,不能保证收敛到全局最优,初始中心的选择会直接影响聚类结果.K-means是随机选择样本点作为聚类中心,容易造成算法局部收敛或者需要较多迭代次数,而K-means++将初始点的选择转化为概率问题,容易得到更好的初始聚类中心,加速算法收敛.下图是算法的步骤,转载自Yixuan-Xu的博客,有兴趣了解K-means算法的小伙伴可以进传送门看一看. 2.算法实现 利用sklearn的数据库生成数据集 # make datasets X,y=data…
实验要求:•实现10以内的非负双精度浮点数加法,例如输入4.99和5.70,能够预测输出为10.69•使用Gprof测试代码热度 代码框架•随机初始化1000对数值在0~10之间的浮点数,保存在二维数组a[1000][2]中.•计算各对浮点数的相加结果,保存在数组b[1000]中,即b[0] = a[0][0] + a[0][1],以此类推.数组a.b即可作为网络的训练样本.•定义浮点数组w.v分别存放隐层和输出层的权值数据,并随机初始化w.v中元素为-1~1之间的浮点数.•将1000组输入(a…
LRU 是 Least Recently Used 的缩写,即最近最少使用.作为一种经典的缓存策略,它的基本思想是长期不被使用的数据,在未来被用到的几率也不大,所以当新的数据进来时我们可以优先把这些数据替换掉. 一.基本要求 固定大小:限制内存使用. 快速访问:缓存插入和查找操作应该很快,最好是 O(1) 时间. 在达到内存限制的情况下替换条目:缓存应该具有有效的算法来在内存已满时驱逐条目. 二.数据结构 下面提供两种实现方式,并完成相关代码. 2.1 Map 在 Javascript 中,Ma…
import java.util.LinkedHashMap; import java.util.Map; public class LRUCache<K, V> extends LinkedHashMap<K, V> { private static final long serialVersionUID = 1L; private final int CACHE_SIZE; public LRUCache(int cacheSize) { // true 表示让 linkedH…
/** * 01.自定义一个hashmap * 02.实现put增加键值对,实现key重复时替换key的值 * 03.重写toString方法,方便查看map中的键值对信息 * 04.实现get方法,根据键对象获取相应的值对象 * 05.封装.增加泛型 * 06.remove方法.数组扩容方法暂缺 * 07.remove方法已增加 */ package cn.study.lu.four; public class HashMap <K,V>{ node3[] table; int size;…
BP算法为深度学习中参数更新的重要角色,一般基于loss对参数的偏导进行更新. 一些根据均方误差,每层默认激活函数sigmoid(不同激活函数,则更新公式不一样) 假设网络如图所示: 则更新公式为: 以上列举了最后2层的参数更新方式,第一层的更新公式类似,即上一层的误差来自于下一层所有的神经元,e的更新就是不断建立在旧的e上(这里g可以当做初始的e) 下面上代码: 1,BP算法 # 手写BP算法 import numpy as np # 先更新参数,再继续传播 # layers:包括从输入层到输…