【机器学习算法-python实现】K-means无监督学习实现分类
1.背景
2.代码
'''
@author: hakuri
'''
from numpy import *
import matplotlib.pyplot as plt
def loadDataSet(fileName): #general function to parse tab -delimited floatsdataMat = [] #assume last column is target valuefr = open(fileName)for line in fr.readlines():curLine = line.strip().split('\t')fltLine = map(float,curLine) #map all elements to float()dataMat.append(fltLine)return dataMatdef distEclud(vecA, vecB):return sqrt(sum(power(vecA - vecB, 2))) #la.norm(vecA-vecB)def randCent(dataSet, k):n = shape(dataSet)[1]centroids = mat(zeros((k,n)))#create centroid matfor j in range(n):#create random cluster centers, within bounds of each dimensionminJ = min(array(dataSet)[:,j])rangeJ = float(max(array(dataSet)[:,j]) - minJ)centroids[:,j] = mat(minJ + rangeJ * random.rand(k,1))return centroidsdef kMeans(dataSet, k, distMeas=distEclud, createCent=randCent):m = shape(dataSet)[0]clusterAssment = mat(zeros((m,2)))#create mat to assign data points #to a centroid, also holds SE of each pointcentroids = createCent(dataSet, k)clusterChanged = Truewhile clusterChanged:clusterChanged = Falsefor i in range(m):#for each data point assign it to the closest centroidminDist = inf; minIndex = -1for j in range(k):distJI = distMeas(array(centroids)[j,:],array(dataSet)[i,:])if distJI < minDist:minDist = distJI; minIndex = jif clusterAssment[i,0] != minIndex: clusterChanged = TrueclusterAssment[i,:] = minIndex,minDist**2print centroids
# print nonzero(array(clusterAssment)[:,0]for cent in range(k):#recalculate centroidsptsInClust = dataSet[nonzero(array(clusterAssment)[:,0]==cent)[0][0]]#get all the point in this clustercentroids[cent,:] = mean(ptsInClust, axis=0) #assign centroid to mean id=nonzero(array(clusterAssment)[:,0]==cent)[0] return centroids, clusterAssment,iddef plotBestFit(dataSet,id,centroids): dataArr = array(dataSet)cent=array(centroids)n = shape(dataArr)[0] n1=shape(cent)[0]xcord1 = []; ycord1 = []xcord2 = []; ycord2 = []xcord3=[];ycord3=[]j=0for i in range(n):if j in id:xcord1.append(dataArr[i,0]); ycord1.append(dataArr[i,1])else:xcord2.append(dataArr[i,0]); ycord2.append(dataArr[i,1])j=j+1 for k in range(n1):xcord3.append(cent[k,0]);ycord3.append(cent[k,1]) fig = plt.figure()ax = fig.add_subplot(111)ax.scatter(xcord1, ycord1, s=30, c='red', marker='s')ax.scatter(xcord2, ycord2, s=30, c='green')ax.scatter(xcord3, ycord3, s=50, c='black')plt.xlabel('X1'); plt.ylabel('X2');plt.show() if __name__=='__main__':dataSet=loadDataSet('/Users/hakuri/Desktop/testSet.txt')
# # print randCent(dataSet,2)
# print dataSet
#
# print kMeans(dataSet,2)a=[]b=[]a, b,id=kMeans(dataSet,2)plotBestFit(dataSet,id,a)
用的时候直接看最后的main,dataSet是数据集输入,我会在下载地址提供给大家。
3.效果图
4.下载地址
/********************************
* 本文来自博客 “李博Garvin“
* 转载请标明出处:http://blog.csdn.net/buptgshengod
******************************************/
【机器学习算法-python实现】K-means无监督学习实现分类相关推荐
- 决策算法python_GitHub - nxety/MachineLearning_Python: 机器学习算法python实现
机器学习算法Python实现 目录 1.代价函数 其中: 下面就是要求出theta,使代价最小,即代表我们拟合出来的方程距离真实值最近 共有m条数据,其中代表我们要拟合出来的方程到真实值距离的平方,平 ...
- 机器学习算法 | Python实现k-近邻算法
机器学习算法 | Python实现k-近邻算法 目录 机器学习算法 | Python实现k-近邻算法 基本介绍 工作原理 程序设计 参考资料 基本介绍 KNN,全名k近邻算法.是⼀种⾮常简单有效的机器 ...
- ML机器学习算法(一): 基于逻辑回归的分类预测
机器学习算法(一): 基于逻辑回归的分类预测 1 逻辑回归的介绍和应用 1.1 逻辑回归的介绍 逻辑回归(Logistic regression,简称LR)虽然其中带有"回归"两个 ...
- 机器学习算法(六):基于决策树的分类预测
机器学习算法(六):基于决策树的分类预测 1 决策树的介绍和应用 1.1决策树的介绍 1.2 决策树的应用 2. 实验室手册 2.1 学习目标 2.2 代码流程 2.3 算法实战 2.3.1 Demo ...
- 机器学习算法(二):基于决策树的分类预测
机器学习算法(二):基于决策树的分类预测 决策树的介绍和应用 简介 决策树构建的伪代码 特征划分选择 信息增益 信息增益率 基尼系数 应用场景 优缺点 基于企鹅数据集的决策树实战 Step1:函数库导 ...
- 【机器学习基础】(六):通俗易懂无监督学习K-Means聚类算法及代码实践
K-Means是一种无监督学习方法,用于将无标签的数据集进行聚类.其中K指集群的数量,Means表示寻找集群中心点的手段. 一. 无监督学习 K-Means 贴标签是需要花钱的. 所以人们研究处理无标 ...
- 吴恩达机器学习(十一)K-means(无监督学习、聚类算法)
目录 0. 前言 1. K-means的算法流程 2. 代价函数(优化目标函数) 3. K 的选择 学习完吴恩达老师机器学习课程的无监督学习,简单的做个笔记.文中部分描述属于个人消化后的理解,仅供参考 ...
- 【机器学习基础】数学推导+纯Python实现机器学习算法3:k近邻
作为一种没有显式训练和学习过程的分类和回归算法,k 近邻在众多有监督机器学习算法中算是一种比较独特的方法.说它独特,是因为 k 近邻不像其他模型有损失函数.有优化算法.有训练过程.对于给定的实例数据和 ...
- 【机器学习】几种常见的无监督学习算法
几种常见的无监督学习算法 1. PCA 降维是指在保留数据特征的前提下,以少量的变量表示有许多变量的数据,这有助于降低多变量数据分析的复杂度.减少数据变量的方法有两种:一种是只选择重要的变量,不使用其 ...
最新文章
- 线性基+树上倍增 ---- BZOJ4568[线性基+树上倍增]
- Android 四大组件之——Acitivity(四) Activity是如何加载显示内容的?
- 1.GD32F103配置环境,搭建工程
- es6—变量的解构赋值
- linux下使用select实现精确定时器
- myeclipse中文界面改颜色_“颜色识别器”安卓APP功能详细介绍
- MaxCompute命令行工具——odpscmd的操作使用
- 酷派D530刷机指引之官方ROM
- 恢复有道词典单词记录本的几种方法(非完美)
- 文件名变乱码. 不知道如何恢复呢?
- 【北交所周报】IPO上会5过5;四成个股实现上涨,硅烷科技涨56%,成单周涨幅最大个股;...
- PV、UV、IV的概念
- matlab 单边频率谱,matlab求单边功率谱
- 我国三大常用坐标系区别(北京54、西安80和WGS-84)(转)
- Day02 - CSS
- Python学校Day06
- eureka注册中心启动后访问,控制台出现socket read timeout exception
- xgboost Dmatrix label全为0 解决方法
- 解决UOS家庭版桌面图标消失,文件管理器进不去
- HTTP 403详解
热门文章
- java中的标识符和关键字_浅谈java中的标识符、修饰符和关键字
- python元组类型_什么是python元组数据类型
- mysql和mybatis面试题_2020年,MyBatis常见面试题总结
- matlab中if语句的用法_if语句的基本用法
- 不用python编程,制作词云图
- oracle修改表结构精度,常见问题--oracle10g修改表结构
- java 雷电_【我叫辰先森】教大家用js写一个雷电
- 运行 命令 linux,Linux基本命令运行
- pytho sin(1/x)震荡间断点
- 选哪扇门得奖金的算法