1. 程式人生 > >聚類分析演算法Python3.6實踐K均值聚類(K-means)

聚類分析演算法Python3.6實踐K均值聚類(K-means)

在http://blog.csdn.net/zouxy09/article/details/17589329 上看到聚類分析演算法,但是是基於python2.7.5版本,直接移植到Python3.6會有問題,更改程式碼後為增加對比性,繪製原始資料不部分;程式碼如下:

#################################################
#pyhon3.6執行
#time:20170501
#version
#liouwuzhou
#Email  : [email protected]
#################################################
def euclDistance(vector1, vector2): return sqrt(sum(power(vector2 - vector1, 2))) def initCentroids(dataSet, k): numSamples, dim = dataSet.shape centroids = zeros((k, dim)) for i in range(k): index = int(random.uniform(0, numSamples)) centroids[i, :] = dataSet[index, :] return
centroids def kmeans(dataSet, k): numSamples = dataSet.shape[0] clusterAssment = mat(zeros((numSamples, 2))) clusterChanged = True centroids = initCentroids(dataSet, k) while clusterChanged: clusterChanged = False for i in range(numSamples): minDist = 100000.0 minIndex = 0
for j in range(k): distance = euclDistance(centroids[j, :], dataSet[i, :]) if distance < minDist: minDist = distance minIndex = j if clusterAssment[i, 0] != minIndex: clusterChanged = True clusterAssment[i, :] = minIndex, minDist ** 2 for j in range(k): pointsInCluster = dataSet[nonzero(clusterAssment[:, 0].A == j)[0]] centroids[j, :] = mean(pointsInCluster, axis=0) print('Congratulations, cluster complete!') return centroids, clusterAssment def showCluster(dataSet, k, centroids, clusterAssment): plt.figure() # numSamples, dim = dataSet.shape if dim != 2: print("Sorry! I can not draw because the dimension of your data is not 2!") return 1 mark = ['or', 'ob', 'og', 'ok', '^r', '+r', 'sr', 'dr', '<r', 'pr'] if k > len(mark): print("Sorry! Your k is too large! please contact Zouxy") return 1 for i in range(numSamples): markIndex = int(clusterAssment[i, 0]) plt.plot(dataSet[i, 0], dataSet[i, 1], mark[markIndex]) mark = ['Dr', 'Db', 'Dg', 'Dk', '^b', '+b', 'sb', 'db', '<b', 'pb'] for i in range(k): plt.plot(centroids[i, 0], centroids[i, 1], mark[i], markersize=12) def 畫原圖(dataSet): plt.figure()# numSamples = len(dataSet) for i in range(numSamples): plt.scatter(dataSet[i][0], dataSet[i][1]) #測試程式碼 from numpy import * import matplotlib.pyplot as plt print("step 1: load data...") dataSet = [] fileIn = open('C:/Python/pycharmwork/MachineLearning/一聚類演算法/例子2/testSet.txt') for line in fileIn.readlines(): lineArr = line.strip().split()#此處不相容python3.6,需要按此更改 dataSet.append([float(lineArr[0]), float(lineArr[1])])# 畫原圖(dataSet) print("step 2: clustering...") dataSet = mat(dataSet) k = 3 centroids, clusterAssment = kmeans(dataSet, k) print("step 3: show the result...") showCluster(dataSet, k, centroids, clusterAssment) plt.show()

相關推薦

分析演算法Python3.6實踐K均值K-means

在http://blog.csdn.net/zouxy09/article/details/17589329 上看到聚類分析演算法,但是是基於python2.7.5版本,直接移植到Python3.6會有問題,更改程式碼後為增加對比性,繪製原始資料不部分;程式碼如下: ##

機器學習筆記3——使用分析演算法對文字分類分類數k未知

聚類分析是一種無監督機器學習(訓練樣本的標記資訊是未知的)演算法,它的目標是將相似的物件歸到同一個簇中,將不相似的物件歸到不同的簇中。如果要使用聚類分析演算法對一堆文字分類,關鍵要解決這幾個問題: 如何衡量兩個物件是否相似 演算法的效能怎麼度量 如何確定分類的個數或聚類

K均值--利用k-means演算法分析NBA近四年球隊實力

分類作為一種監督學習方法,要求必須事先明確知道各個類別的資訊,並且斷言所有待分類項都有一個類別與之對應。但是很多時候上述條件得不到滿足,尤其是在處理海量資料的時候,如果通過預處理使得資料滿足分類演算法的要求,則代價非常大,這時候可以考慮使用聚類演算法。聚類屬於無監督學習,相比於分類,聚類不依賴預定義的類和類標

Python機器學習演算法實踐——k均值k-means

一開始的目的是學習十大挖掘演算法(機器學習演算法),並用編碼實現一遍,但越往後學習,越往後實現編碼,越發現自己的編碼水平低下,學習能力低。這一個k-means演算法用Python實現竟用了三天時間,可見編碼水平之低,而且在編碼的過程中看了別人的編碼,才發現自己對

機器學習實戰Machine Learning in Action學習筆記————06.k-均值演算法kMeans學習筆記

機器學習實戰(Machine Learning in Action)學習筆記————06.k-均值聚類演算法(kMeans)學習筆記關鍵字:k-均值、kMeans、聚類、非監督學習作者:米倉山下時間:2018-11-3機器學習實戰(Machine Learning in Action,@author: Pet

分析--k均值

無監督聚類 模型表示 給定樣本集 D = {

機器學習——K-均值K-means演算法

本文轉載自:https://www.cnblogs.com/ybjourney/p/4714870.html 一 K-均值聚類(K-means)概述 聚類 “類”指的是具有相似性的集合。聚類是指將資料集劃分為若干類,使得類內之間的資料最為相似,各類之間的資料相

在Ignite中使用k-均值演算法

在本系列前面的文章中,簡單介紹了一下Ignite的k-最近鄰(k-NN)分類演算法,下面會嘗試另一個機器學習演算法,即使用泰坦尼克資料集介紹k-均值聚類演算法。正好,Kaggle提供了CSV格式的資料集,而要分析的是兩個分類:即乘客是否倖存。 為了將資料轉換為Ignite支援的格式,前期需要做一些清理和格式化

k-均值 演算法

  首先初始化k個點作為質心,遍歷資料集,把每一個數據點分配到距離最近的質心,把這個質心下的所有點的均值作為新的質心,迭代更新。   度量聚類效果的指標:SSE( sum of squared error)誤差平方和 改進演算法:二分-k-均值演算法(克服k-均值區

機器學習實戰———k均值 演算法

問題:關於第九章list()新增的問題 fltLine = list(map(float,curLine)) fltLine = map(float,curLine) 二者的區別在於 加list()輸出為數 [1.658985, 4.285136] [-3.453

《機器學習實戰》二分-kMeans演算法二分K均值

首先二分-K均值是為了解決k-均值的使用者自定義輸入簇值k所延伸出來的自己判斷k數目,其基本思路是: 為了得到k個簇,將所有點的集合分裂成兩個簇,從這些簇中選取一個繼續分裂,如此下去,直到產生k個簇。 虛擬碼: 初始化簇表,使之包含由所有的點組成的簇。 repeat   &n

機器學習實戰---讀書筆記: 第10章 利用K均值演算法對未標註資料分組---1

#!/usr/bin/env python # encoding: utf-8 import os from matplotlib import pyplot as plt from numpy import * ''' 讀書筆記之--<<機器學習實戰>>--第10章_

k-means(k均值)演算法介紹及實現(c++)

基本介紹: k-means 演算法接受輸入量 k ;然後將n個數據物件劃分為 k個聚類以便使得所獲得的聚類滿足:同一聚類中的物件相似度較高;而不同聚類中的物件相似度較小。聚類相似度是利用各聚類中物件的均值所獲得一個“中心物件”(引力中心)來進行計算的。 工作過程:   k

基於.NET實現資料探勘--分析演算法

http://www.cnblogs.com/captain_ccc/articles/4093615.html 本篇文章主要採用另外一種分析演算法對目標顧客群體的挖掘,同樣的利用微軟案例資料進行簡要總結。 應用場景介紹 通過上一篇中我們採用Microsoft決策

K-means(K-均值)演算法

劃分方法 聚類分析最簡單、最基本的版本是劃分,它把物件組織成多個互斥的簇。這一方法,要求每個物件必須/恰好屬於每一個簇。(事實上,我們應該知道,這個要求是很不合理的,因為它忽略了離群點,假若把噪聲資料強行劃分在簇裡,那勢必會降低聚類的準確率,所以為了改進這一點

【opencv學習之四十三】K均值演算法

K均值聚類演算法,在opencv中通過kmeans()函式實現;k均值通俗講:就是從一堆樣本中,隨便挑出幾個,比如3個吧,然後用樣本中的和這挑出來的比較,比較後排序,誰和挑出的那個接近就把他劃到那個類裡,比如樣A和挑1、挑2、挑3中,挑2最接近,則把樣A劃到挑2裡,當然還沒完

《機器學習實戰》筆記之十——利用K均值演算法對未標註資料分組

第十章 利用K均值聚類演算法對未標註資料分組 10.1 K-均值聚類演算法 K-均值是發現給定資料集的k個簇的演算法,每個簇通過其質心來描述。其優點為容易實現,但可能收斂到區域性最小值,在大規模資料集上收斂較慢。 隨機確定k個初始點為質心,為每個點找距其最近的質心,並將

K均值演算法的MATLAB實現

單來說,K-均值聚類就是在給定了一組樣本(x1, x2, ...xn) (xi, i = 1, 2, ... n均是向量) 之後,假設要將其聚為 m(<n) 類,可以按照如下的步驟實現:   Step 1: 從 (x1, x2, ...xn) 中隨機選擇

如何編寫求K-均值演算法的Matlab程式?

在聚類分析中,K-均值聚類演算法(k-means algorithm)是無監督分類中的一種基本方法,其也稱為C-均值演算法,其基本思想是:通過迭代的方法,逐次更新各聚類中心的值,直至得到最好的聚類結果。 假設要把樣本集分為c個類別,演算法如下: (1)適當選擇c個類的初始中心; (2)在第k次迭代中,對任意

使用python sklearn下的k_means分析演算法時遇到的問題

#-*- coding: utf-8 -*- #使用K-Means演算法聚類消費行為特徵資料 import pandas as pd #引數初始化 inputfile = '../data/consumption_data.xls' #銷量及其他屬性資料 o