电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

python 代碼實現k-means聚類分析的思路(不使用現成聚類庫)

瀏覽:70日期:2022-07-23 15:52:15

一、實驗目標

1、使用 K-means 模型進行聚類,嘗試使用不同的類別個數 K,并分析聚類結果。

​2、按照 8:2 的比例隨機將數據劃分為訓練集和測試集,至少嘗試 3 個不同的 K 值,并畫出不同 K 下 的聚類結果,及不同模型在訓練集和測試集上的損失。對結果進行討論,發現能解釋數據的最好的 K 值。二、算法原理

首先確定k,隨機選擇k個初始點之后所有點根據距離質點的距離進行聚類分析,離某一個質點a相較于其他質點最近的點分配到a的類中,根據每一類mean值更新迭代聚類中心,在迭代完成后分別計算訓 練集和測試集的損失函數SSE_train、SSE_test,畫圖進行分析。

python 代碼實現k-means聚類分析的思路(不使用現成聚類庫)

偽代碼如下:

num=10 #k的種類for k in range(1,num): 隨機選擇k個質點 for i in range(n): #迭代n次 根據點與質點間的距離對于X_train進行聚類 根據mean值迭代更新質點 計算SSE_train 計算SSE_test畫圖

 算法流程圖:

python 代碼實現k-means聚類分析的思路(不使用現成聚類庫)

三、代碼實現

1、導入庫

import pandas as pdimport matplotlib.pyplot as pltimport numpy as npfrom sklearn.model_selection import train_test_split

2、計算距離

def distance(p1,p2): return np.sqrt((p1[0]-p2[0])**2+(p1[1]-p2[1])**2)

3、計算均值

def means(arr): return np.array([np.mean([p[0] for p in arr]),np.mean([p[1] for p in arr])])

4、二維數據處理

#數據處理data= pd.read_table(’cluster.dat’,sep=’t’,header=None) data.columns=[’x’]data[’y’]=Nonefor i in range(len(data)): #遍歷每一行 column = data[’x’][i].split( ) #分開第i行,x列的數據。split()默認是以空格等符號來分割,返回一個列表 data[’x’][i]=column[0] #分割形成的列表第一個數據給x列 data[’y’][i]=column[1] #分割形成的列表第二個數據給y列list=[]list1=[]for i in range(len(data)): list.append(float(data[’x’][i])) list.append(float(data[’y’][i])) list1.append(list) list=[]arr=np.array(list1)print(arr)

python 代碼實現k-means聚類分析的思路(不使用現成聚類庫)

5、劃分數據集和訓練集

#按照8:2劃分數據集和訓練集X_train, X_test = train_test_split(arr,test_size=0.2,random_state=1)

6、主要聚類實現

count=10 #k的種類:1、2、3...10SSE_train=[] #訓練集的SSESSE_test=[] #測試集的SSEn=20 #迭代次數for k in range(1,count): cla_arr=[] #聚類容器 centroid=[] #質點 for i in range(k): j=np.random.randint(0,len(X_train)) centroid.append(list1[j]) cla_arr.append([]) centroids=np.array(centroid) cla_tmp=cla_arr #臨時訓練集聚類容器 cla_tmp1=cla_arr #臨時測試集聚類容器 for i in range(n): #開始迭代 for e in X_train: #對于訓練集中的點進行聚類分析 pi=0 min_d=distance(e,centroids[pi]) for j in range(k): if(distance(e,centroids[j])<min_d): min_d=distance(e,centroids[j]) pi=j cla_tmp[pi].append(e) #添加點到相應的聚類容器中 for m in range(k): if(n-1==i): break centroids[m]=means(cla_tmp[m])#迭代更新聚類中心 cla_tmp[m]=[] dis=0 for i in range(k): #計算訓練集的SSE_train for j in range(len(cla_tmp[i])): dis+=distance(centroids[i],cla_tmp[i][j]) SSE_train.append(dis) col = [’HotPink’,’Aqua’,’Chartreuse’,’yellow’,’red’,’blue’,’green’,’grey’,’orange’] #畫出對應K的散點圖 for i in range(k): plt.scatter([e[0] for e in cla_tmp[i]],[e[1] for e in cla_tmp[i]],color=col[i]) plt.scatter(centroids[i][0],centroids[i][1],linewidth=3,s=300,marker=’+’,color=’black’) plt.show() for e in X_test: #測試集根據訓練集的質點進行聚類分析 ki=0 min_d=distance(e,centroids[ki]) for j in range(k): if(distance(e,centroids[j])<min_d): min_d=distance(e,centroids[j]) ki=j cla_tmp1[ki].append(e) for i in range(k): #計算測試集的SSE_test for j in range(len(cla_tmp1[i])): dis+=distance(centroids[i],cla_tmp1[i][j]) SSE_test.append(dis)

python 代碼實現k-means聚類分析的思路(不使用現成聚類庫)

7、畫圖

SSE=[] #計算測試集與訓練集SSE的差值for i in range(len(SSE_test)): SSE.append(SSE_test[i]-SSE_train[i])x=[1,2,3,4,5,6,7,8,9]plt.figure()plt.plot(x,SSE_train,marker=’*’)plt.xlabel('K')plt.ylabel('SSE_train')plt.show() #畫出SSE_train的圖plt.figure()plt.plot(x,SSE_test,marker=’*’)plt.xlabel('K')plt.ylabel('SSE_test')plt.show() #畫出SSE_test的圖plt.figure()plt.plot(x,SSE,marker=’+’)plt.xlabel('K')plt.ylabel('SSE_test-SSE_train')plt.show() #畫出SSE_test-SSE_train的圖

python 代碼實現k-means聚類分析的思路(不使用現成聚類庫)

python 代碼實現k-means聚類分析的思路(不使用現成聚類庫)

四、實驗結果分析

可以看出SSE隨著K的增長而減小,測試集和訓練集的圖形趨勢幾乎一致,在相同的K值下,測試集的SSE大于訓練集的SSE。于是我對于在相同的K值下的SSE_test和SSE_train做了減法(上圖3),可知K=4時數據得出結果最好。這里我主要使用肘部原則來判斷。本篇并未實現輪廓系數,參考文章:https://www.jb51.net/article/187771.htm

總結

到此這篇關于python 代碼實現k-means聚類分析(不使用現成聚類庫)的文章就介紹到這了,更多相關python k-means聚類分析內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 进口便携式天平,外校_十万分之一分析天平,奥豪斯工业台秤,V2000防水秤-重庆珂偌德科技有限公司(www.crdkj.com) | 温泉机设备|温泉小镇规划设计|碳酸泉设备 - 大连连邦温泉科技 | 广州食堂承包_广州团餐配送_广州堂食餐饮服务公司 - 旺记餐饮 | 低噪声电流前置放大器-SR570电流前置放大器-深圳市嘉士达精密仪器有限公司 | 综合管廊模具_生态,阶梯护坡模具_检查井模具制造-致宏模具厂家 | 泥浆在线密度计厂家-防爆数字压力表-膜盒-远传压力表厂家-江苏大亚自控设备有限公司 | 杜康白酒加盟_杜康酒代理_杜康酒招商加盟官网_杜康酒厂加盟总代理—杜康酒神全国运营中心 | 螺纹三通快插接头-弯通快插接头-宁波舜驰气动科技有限公司 | 六自由度平台_六自由度运动平台_三自由度摇摆台—南京全控科技 | 广州办公室设计,办公室装修,写字楼设计,办公室装修公司_德科 | 冷却塔风机厂家_静音冷却塔风机_冷却塔电机维修更换维修-广东特菱节能空调设备有限公司 | 淘气堡_室内儿童乐园_户外无动力儿童游乐设备-高乐迪(北京) | 市政路灯_厂家-淄博信达电力科技有限公司| 扒渣机,铁水扒渣机,钢水扒渣机,铁水捞渣机,钢水捞渣机-烟台盛利达工程技术有限公司 | 耐磨陶瓷,耐磨陶瓷管道_厂家-淄博拓创陶瓷科技 | 河南包装袋厂家_河南真空袋批发价格_河南服装袋定制-恒源达包装制品 | 管理会计网-PCMA初级管理会计,中级管理会计考试网站 | 皮带式输送机械|链板式输送机|不锈钢输送机|网带输送机械设备——青岛鸿儒机械有限公司 | 电渗析,废酸回收,双极膜-山东天维膜技术有限公司 | ISO9001认证咨询_iso9001企业认证代理机构_14001|18001|16949|50430认证-艾世欧认证网 | 地脚螺栓_材质_标准-永年县德联地脚螺栓厂家 | 耐高温风管_耐高温软管_食品级软管_吸尘管_钢丝软管_卫生级软管_塑料波纹管-东莞市鑫翔宇软管有限公司 | 利浦顿蒸汽发生器厂家-电蒸汽发生器/燃气蒸汽发生器_湖北利浦顿热能科技有限公司官网 | 粒米特测控技术(上海)有限公司-测功机_减速机测试台_电机测试台 | 锂电池砂磨机|石墨烯砂磨机|碳纳米管砂磨机-常州市奥能达机械设备有限公司 | 干洗加盟网-洗衣店品牌排行-干洗设备价格-干洗连锁加盟指南 | PC阳光板-PC耐力板-阳光板雨棚-耐力板雨棚,厂家定制[优尼科板材] | 纸布|钩编布|钩针布|纸草布-莱州佳源工艺纸布厂 | 济南ISO9000认证咨询代理公司,ISO9001认证,CMA实验室认证,ISO/TS16949认证,服务体系认证,资产管理体系认证,SC食品生产许可证- 济南创远企业管理咨询有限公司 郑州电线电缆厂家-防火|低压|低烟无卤电缆-河南明星电缆 | 高压直流电源_特种变压器_变压器铁芯-希恩变压器定制厂家 | 小型气象站_便携式自动气象站_校园气象站-竞道气象设备网 | 河北凯普威医疗器材有限公司,高档轮椅系列,推车系列,座厕椅系列,协步椅系列,拐扙系列,卫浴系列 | 环球电气之家-中国专业电气电子产品行业服务网站! | 江苏齐宝进出口贸易有限公司| 四探针电阻率测试仪-振实密度仪-粉末流动性测定仪-宁波瑞柯微智能 | 内六角扳手「厂家」-温州市威豪五金工具有限公司 | 自动钻孔机-全自动数控钻孔机生产厂家-多米(广东)智能装备有限公司 | 爱佩恒温恒湿测试箱|高低温实验箱|高低温冲击试验箱|冷热冲击试验箱-您身边的模拟环境试验设备技术专家-合作热线:400-6727-800-广东爱佩试验设备有限公司 | 杭州中央空调维修_冷却塔/新风机柜/热水器/锅炉除垢清洗_除垢剂_风机盘管_冷凝器清洗-杭州亿诺能源有限公司 | 超声波焊接机,振动摩擦焊接机,激光塑料焊接机,超声波焊接模具工装-德召尼克(常州)焊接科技有限公司 | 深圳活动策划公司|庆典策划|专业公关活动策划|深圳艺典文化传媒 重庆中专|职高|技校招生-重庆中专招生网 |