第十章 k-均值演算法 10.4 對地圖上的點進行聚類
將地圖上的點進行聚類,安排交通工具抵達這些簇的質心,然後步行到每個簇內地址。
這裡我們直接用給出的檔案進行操作,跳過10.4.1節。
新增程式碼:
def distSLC(vecA, vecB): # 返回地球表面兩點之間的距離 a = sin(vecA[0,1] * pi / 180) * sin(vecB[0,1] * pi / 180) b = cos(vecA[0,1] * pi / 180) * cos(vecB[0,1] * pi / 180) * \ cos(pi * (vecB[0,0] - vecA[0,0]) / 180) return arccos(a + b) * 6371.0 import matplotlib import matplotlib.pyplot as plt def clusterClubs(numClust = 5): # 畫圖,引數為希望得到的簇數目 datList = [] for line in open('places.txt').readlines(): lineArr = line.split('\t') datList.append([float(lineArr[4]), float(lineArr[3])]) datMat = mat(datList) myCentroids, clustAssing = biKmeans(datMat, numClust, \ distMeas = distSLC) fig = plt.figure() rect = [0.1, 0.1, 0.8, 0.8] scatterMarkers = ['s', 'o', '^', '8', 'p', \ 'd', 'v', 'h', '>', '<'] axprops = dict(xticks = [], yticks = []) ax0 = fig.add_axes(rect, label = 'ax0', **axprops) imgP = plt.imread('Portland.png') # imread 基於影象建立矩陣 ax0.imshow(imgP) ax1 = fig.add_axes(rect, label = 'ax1', frameon = False) for i in range(numClust): ptsInCurrCluster = datMat[nonzero(clustAssing[:,0].A == i)[0],:] markerStyle = scatterMarkers[i % len(scatterMarkers)] # 使用索引來選擇標記形狀 ax1.scatter(ptsInCurrCluster[:,0].flatten().A[0],\ ptsInCurrCluster[:,1].flatten().A[0],\ marker = markerStyle, s = 90) ax1.scatter(myCentroids[:,0].flatten().A[0],\ myCentroids[:,1].flatten().A[0], marker = '+', s = 300) plt.show()
執行程式碼:
import kMeans
from numpy import *
kMeans.clusterClubs(5)
得到結果:
==================================================================================
通過修改簇的數目,得到程式執行的效果。
比如4簇:
3簇:
================================================================================================
10.5 小結
聚類是一種無監督的學習方法。所謂無監督學習是指事先並不知道要尋找的內容,即沒有目標變數。聚類將資料點歸到多個簇中,其中相似資料點處於同一簇,而不相似資料點處於不同簇中。聚類中可以使用多種不同的方法計算相似度。
K-均值聚類演算法以 k 個隨機質心開始。演算法會計算每個點到質心的距離。每個點會被分配到距其最近的簇質心。然後緊接著基於新分配到簇的點更新簇質心。以上過程重複數次,直到質心不再改變。
為了得到更好地聚類效果,可以使用另一種稱為二分 k-均值 的聚類演算法。該方法首先將所有點作為一個簇,然後使用 k-均值 演算法對其劃分,下一次迭代時,選擇有最大誤差的簇進行劃分。這個過程重複直到 k 個簇建立為止。
相關推薦
第十章 k-均值演算法 10.4 對地圖上的點進行聚類
將地圖上的點進行聚類,安排交通工具抵達這些簇的質心,然後步行到每個簇內地址。 這裡我們直接用給出的檔案進行操作,跳過10.4.1節。 新增程式碼: def distSLC(vecA, vecB):
K-means演算法對地圖上點進行聚類(未修訂篇)
# -*- coding: utf-8 -*- """ In the general case, we have a "target function" that we want to minimize, and we also have its "gradie
grokking algorithms K-nearest neighbors第十章 K-鄰近演算法 中文翻譯
說明:《grokking algorithms》演算法講解的非常深入淺出,用好多幅圖以及日常常用的例子講演算法講解的非常好,若是英文還可以的話,建議看英文原版,非常喜歡作者的寫作風格,將複雜的演算法用簡單的方式描述出來,真的好厲害!! 第十章. K-鄰近演算法
C++ primer學習筆記——第十章 泛型演算法
標準庫容器定義的操作集合驚人的小。標準庫並未給每個容器新增大量功能,而是提供了一組演算法,這些演算法中的大多數都獨立於任何特定的容器。這些演算法是通用的(generic,或稱泛型的):它們可以用於不同型別的容器和不同型別的元素 一、概述 大多數演算法都定義在標頭檔案alg
《Machine Learning in Action》| 第1章 k-近鄰演算法
準備:使用 Python 匯入資料 """ @函式說明: 建立資料集 """ def createDataSet(): # 四組二維特徵 group = np.array([[3,104],[2,100],[101,10],[99,5]])
《web安全之機器學習入門》第5章K近鄰演算法讀書筆記【下】
Rootkit是一種特殊的惡意軟體,它的功能是在安裝目標上隱藏自身及指定的檔案、程序和網路連線等資訊。待分析資料集:KDD-99資料集,連結:http://kdd.ics.uci.edu/databases/kddcup99/kddcup99.html該資料集是從一個模擬的美
《web安全之機器學習入門》第5章K近鄰演算法讀書筆記【上】
K近鄰演算法的思路:如果一個樣本在空間上最近的K鄰居大多數都屬於M類,則該樣本屬於M類。在本章中,使用K近鄰演算法識別使用者操作序列中的異常命令。分析資料集url:http://www.schonlau.net/資料集說明:50個使用者的linux操作日誌以User開頭的檔案
【機器學習實戰】第2章 K-近鄰演算法(k-NearestNeighbor,KNN)
第2章 k-近鄰演算法 <script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=default"></script>
程式碼註釋:機器學習實戰第2章 k-近鄰演算法
寫在開頭的話:在學習《機器學習實戰》的過程中發現書中很多程式碼並沒有註釋,這對新入門的同學是一個挑戰,特此貼出我對程式碼做出的註釋,僅供參考,歡迎指正。 1、匯入資料: #coding:gbk from numpy import * import operator de
Python 編程快速上手 讓繁瑣工作自動化-第十章實踐項目 10.8 調試硬幣拋擲
技術 http watermark db4 二次 兩個 圖片 簡單 -o 下面程序的意圖是一個簡單的硬幣拋擲猜測遊戲。玩家有兩次猜測機會(這是一個簡單的遊戲)。但是,程序中有一些缺陷。讓程序運行幾次,找出缺陷,使該程序能正確運行。上面的是書中的代碼找到兩個缺陷1、沒有指明0
第十章 Fisco Bcos 許可權控制下的資料上鍊實操演練
一、目的 前面已經完成fisco bcos 相關底層搭建、sdk使用、控制檯、webase中介軟體平臺等系列實戰開發, 本次進行最後一個部分,體系化管理區塊鏈底層,建立有序的底層控管制度,實現許可權化管理。 完成:鏈管理、系統管理、資料上鍊操作等。 其中資料上鍊分為:合約版本上鍊、cru
K-means演算法(將表中的點分為n類)
客戶分類: 1、將客戶分為三類:超級VIP、vip、普通使用者 2、需要你將不同的類的資料,在圖上顯示出來,用不同的顏色 3、返回三個類中,各包含哪些點 資料在下面的的表中,因為無法上傳表格所以截了個圖! import matplotlib.pyplot as plt
演算法筆記 --第十章 提高篇(4) --圖演算法專題
讀書筆記 圖的定義 圖由頂點Vertex和邊Edge組成,每條邊的兩端都必須是圖的兩個頂點。而記號G(V,E)表示圖G的頂點集合為V,邊集為E。 一般來說:圖可以分為有向圖和無向圖。有向圖是所有邊都有方向,無向圖是所有邊都是雙向的。 頂點的度是指和該頂點相連的邊的條數。對於有向圖來說
2018.10.16——第十章-10.1概述-10.2初識泛型演算法
10.1 #include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { int val = 1;
第八次作業--聚類--K均值演算法:自主實現與sklearn.cluster.KMeans呼叫
import numpy as np x = np.random.randint(1,100,[20,1]) y = np.zeros(20) k = 3 x def initcenter(x, k):#初始聚類中心陣列 return x[:k] kc = initcenter
吳恩達機器學習(第十章)---神經網路的反向傳播演算法
一、簡介 我們在執行梯度下降的時候,需要求得J(θ)的導數,反向傳播演算法就是求該導數的方法。正向傳播,是從輸入層從左向右傳播至輸出層;反向傳播就是從輸出層,算出誤差從右向左逐層計算誤差,注意:第一層不計算,因為第一層是輸入層,沒有誤差。 二、如何計算 設為第l層,第j個的誤差。
第八次作業-----#聚類--K均值演算法:自主實現與sklearn.cluster.KMeans呼叫
1. 用python實現K均值演算法 K-means是一個反覆迭代的過程,演算法分為四個步驟: (x,k,y) 1) 選取資料空間中的K個物件作為初始中心,每個物件代表一個聚類中心; def initcenter(x, k): kc 2) 對於樣本中的資料物件,根據它們與這些聚類中心的歐氏距離,按距
《演算法》第四章部分程式 part 10
▶ 書中第四章部分程式,包括在加上自己補充的程式碼,包括無向圖連通分量,Kosaraju - Sharir 演算法、Tarjan 演算法、Gabow 演算法計算有向圖的強連通分量 ● 無向圖連通分量 1 package package01; 2 3 import edu.princet
SLAM從入門到放棄:SLAM十四講第十章習題(1-4)
以下均為簡單筆記,如有錯誤,請多多指教。 證明式 K =
為什麼我要放棄javaScript資料結構與演算法(第十章)—— 排序和搜尋演算法
本章將會學習最常見的排序和搜尋演算法,如氣泡排序、選擇排序、插入排序、歸併排序、快速排序和堆排序,以及順序排序和二叉搜尋演算法。 第十章 排序和搜尋演算法 排序演算法 我們會從一個最慢的開始,接著是一些效能好一些的方法 先建立一個數組(列表)來表示待排序和搜尋的資料結構。 function Arra