机器学习实战之KMeans算法pandas实现
来源:互联网 发布:淘宝产品为什么下架了 编辑:程序博客网 时间:2024/06/01 18:20
这次写的恶心死我了,第一次随机选中心点的代码有问题还是怎么的,导致第一轮过完,可能会出现某个中心点根本就完全不合适,没有任何一个点会标记为这个中心点,然后报错。导致我的这个代码时灵时不灵,开始完全想不到bug的原因。
而且虽然用pandas来自己实现确实能帮忙巩固pandas的知识,但我还是觉得以前是走入了误区。机器学习重要的部分应该是对理论的理解和轮子的使用,至于书中的代码,理解下理论实现的具体过程就行了,自己在这费心费力造轮子实在是意义不大,虽然在造的过程中也能加深理解,但事倍功半
所以还是决定以后学习就结合西瓜书的理论,实战中的实现思路和sklearn的代码实现了
import numpy as npimport pandas as pdfrom pandas import DataFrame,Seriespath = r'C:\Users\36955\Downloads\mlp\Ch10\testSet2.txt'data = pd.read_csv(path,sep='\t',header=None)def randCent(dataSet, k): n = dataSet.shape[1] centroids = DataFrame(np.zeros((k,n))) data_min = dataSet.min(0) data_range = dataSet.max(0)-data_min for j in range(n): minJ = data_min[j] rangeJ = float(data_range[j]) centroids.iloc[:,j] = minJ + rangeJ * np.random.rand(k,1) return centroidsdef distEclud(vecA, vecB): return np.sqrt(np.sum(np.power(vecA - vecB, 2)))def kMeans(data,k): m = data.shape[0] clusterAssment = DataFrame(np.zeros((m,2)),columns=['clusterName','dist']) centroids = randCent(data,k) clusterChanged = True while clusterChanged: clusterChanged = False for i in range(m): minDist = np.inf;minIndex = -1 for j in range(k): #print (i,j,m,len(centroids)) dist = distEclud(data.iloc[i,:],centroids.iloc[j,:]) if dist < minDist: minDist = dist;minIndex = j if clusterAssment.iloc[i,0] != minIndex: clusterChanged = True clusterAssment.iloc[i,:] = minIndex,minDist**2 #print centroids centroids = data.groupby(clusterAssment.clusterName).mean() return centroids,clusterAssment#print kMeans(data,3)def biKmeans(data,k): m = data.shape[0] clusterAssment = DataFrame(np.zeros((m,2)),columns=['clusterName','dist']) centroid0 = list(data.mean(0)) centList = [centroid0] while len(centList)<k: lowestSSE = np.inf for i in range(len(centList)): splitCluster = data.iloc[clusterAssment[clusterAssment.clusterName==i].index,:] splitCentroids,splitClusterAssement = kMeans(splitCluster,2) splitSSE = splitClusterAssement.dist.sum() nosplitSSE = clusterAssment[clusterAssment.clusterName!=i].dist.sum() if (splitSSE+nosplitSSE)<lowestSSE: besttosplit = i newCentroids = splitCentroids.copy() newAssement = splitClusterAssement.copy() lowestSSE = splitSSE+nosplitSSE centList[besttosplit] = list(newCentroids.iloc[0,:]) centList.append(list(newCentroids.iloc[1,:])) newAssement.clusterName[newAssement.clusterName==0] = besttosplit newAssement.clusterName[newAssement.clusterName==1] = len(centList)-1 clusterAssment=clusterAssment[clusterAssment.clusterName!=besttosplit] clusterAssment = pd.concat([clusterAssment,newAssement],axis=0) return centList,clusterAssmentprint biKmeans(data,4)
阅读全文
0 0
- 机器学习实战之KMeans算法pandas实现
- 机器学习实战之knn算法pandas实现
- 机器学习实战之决策树算法pandas实现
- 机器学习实战之KMeans
- Scikit-learn机器学习实战之Kmeans
- 机器学习实战--kMeans
- 机器学习实战 Kmeans
- 机器学习-python实现kMeans算法
- 机器学习笔记之Kmeans算法
- 机器学习算法-kMeans
- 机器学习Matlab实战之图像压缩————Kmeans算法
- 机器学习Kmeans实现
- 机器学习之Kmeans
- 机器学习实战笔记8(kmeans)
- 机器学习实战--kmeans实例讲解
- 基于qt和opencv3实现机器学习之:kmeans
- 《机器学习实战》kMeans算法(K均值聚类算法)
- 机器学习非监督学习- kmeans算法
- R语言识别ORACLE数据库名
- 欢迎使用CSDN-markdown编辑器
- iOS 兄弟控件的 自动布局实现N等分且宽高比例是1:N(xib 上实现) 代码很简单就不多说
- SpringMVC学习(五)-RESTFUl_CRUD操作
- 奇数个数
- 机器学习实战之KMeans算法pandas实现
- reshape 与 shape
- spring4+ Quartz2动态任务
- Quartz原理解析
- Okhttp3 带参数文件上传~重复造轮子中
- 配置文件解读 http://blog.csdn.net/maweifei/article/details/52965523
- sparkSQL官网简单解析
- Javaweb学习总结(三)
- 最大似然,贝叶斯,最大后验