欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何利用python實(shí)現(xiàn)kmeans聚類

 更新時(shí)間:2022年05月17日 14:48:15   作者:嘟嘟肚腩仔  
K-Means是聚類算法的一種,以距離來判斷數(shù)據(jù)點(diǎn)間的相似度并對數(shù)據(jù)進(jìn)行聚類,下面這篇文章主要給大家介紹了關(guān)于如何利用python實(shí)現(xiàn)kmeans聚類的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下

一、先上手?jǐn)]代碼!

1、首先是導(dǎo)入所需要的庫和數(shù)據(jù)

import pandas as pd
import numpy as np
import random
import math
import matplotlib.pyplot as plt
 
# 這兩行代碼解決 plt 中文顯示的問題
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
 
df = pd.read_excel('13信科學(xué)生成績.xlsx')
data = np.array(df)
 
df.head(10)

先給大伙們看看數(shù)據(jù)集長啥樣:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ZCD5Y-96Zy45LiN5ZCQ5Y-96Zy455qu,size_3,color_FFFFFF,t_70,g_se,x_16

用matplotlib簡單的可視化一下初始數(shù)據(jù):

# 輸入數(shù)據(jù)
x = data.T[0]
y = data.T[1]
 
plt.scatter(x, y, s=50, c='r')  # 畫散點(diǎn)圖
plt.xlabel('平時(shí)')  # 橫坐標(biāo)軸標(biāo)題
plt.ylabel('期末')  # 縱坐標(biāo)軸標(biāo)題
plt.show()

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ZCD5Y-96Zy45LiN5ZCQ5Y-96Zy455qu,size_10,color_FFFFFF,t_70,g_se,x_16

 2、接下來就是kmeans的核心算法了

k=3
i = 1
 
min1 = data.min(axis = 0)
max1 = data.max(axis = 0)
 
#在數(shù)據(jù)最大最小值中隨機(jī)生成k個(gè)初始聚類中心,保存為t
centre = np.empty((k,2))
for i in range(k):
    centre[i][0] = random.randint(min1[0],max1[0])#平時(shí)成績
    centre[i][1] = random.randint(min1[1],max1[1])#期末成績
 
while i<500:
    
    #計(jì)算歐氏距離
    def euclidean_distance(List,t):
        return math.sqrt(((List[0] - t[0])**2 + (List[1] - t[1])**2))
 
    #每個(gè)點(diǎn)到每個(gè)中心點(diǎn)的距離矩陣
    dis = np.empty((len(data),k))
    for i in range(len(data)):
        for j in range(k):
            dis[i][j] = euclidean_distance(data[i],centre[j])
    
    #初始化分類矩陣
    classify = []
    for i in range(k):
        classify.append([])
    
    #比較距離并分類
    for i in range(len(data)):
        List = dis[i].tolist()
        index = List.index(dis[i].min())
        classify[index].append(i)
    
    #構(gòu)造新的中心點(diǎn)
    new_centre = np.empty((k,2))
    for i in range(len(classify)):
 
        new_centre[i][0] = np.sum(data[classify[i]][0])/len(classify[i])
        new_centre[i][1] = np.sum(data[classify[i]][1])/len(classify[i])
     
    #比較新的中心點(diǎn)和舊的中心點(diǎn)是否一樣
    if (new_centre == centre).all():
        break
    else:
        centre = new_centre
        i = i + 1
 
# print('迭代次數(shù)為:',i)
print('聚類中心為:',new_centre)
print('分類情況為:',classify)

注意?。?!這里的k是指分成k類,讀者可以自行選取不同的k值做實(shí)驗(yàn)

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ZCD5Y-96Zy45LiN5ZCQ5Y-96Zy455qu,size_20,color_FFFFFF,t_70,g_se,x_16

3、可視化部分(將不用類用不同顏色區(qū)分開來~~)

mark = ['or', 'ob', 'og', 'ok','sb', 'db', '<b', 'pb'] #紅、藍(lán)、綠、黑四種顏色的圓點(diǎn)
#mark=['sb', 'db', '<b', 'pb']
plt.figure(3)#創(chuàng)建圖表1  
for i in range(0,k):
 
    x=[]
    y=[]
    for j in range(len(classify[i])):
        x.append(data[classify[i][j]][0])
        y.append(data[classify[i][j]][1])
 
    plt.xlim(xmax=105,xmin=45)
    plt.ylim(ymax=85,ymin=-5)
    plt.plot(x,y,mark[i])
    #plt.show()

 一起來康康可視化結(jié)果8?。?/p>

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ZCD5Y-96Zy45LiN5ZCQ5Y-96Zy455qu,size_9,color_FFFFFF,t_70,g_se,x_16

二、接下來是調(diào)庫代碼?。╯klearn)

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans  
from sklearn import metrics
 
df = pd.read_excel('13信科學(xué)生成績.xlsx')
data = np.array(df)
y_pred=KMeans(n_clusters=3,random_state=9).fit_predict(data)
plt.scatter(data[:,0],data[:,1],c=y_pred)
plt.show()
print(metrics.calinski_harabasz_score(data,y_pred))

 可視化結(jié)果和手?jǐn)]的結(jié)果略有差別,有可能是數(shù)據(jù)集的問題,也有可能是k值選取的問題,各位親們不需要擔(dān)心?。?!

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ZCD5Y-96Zy45LiN5ZCQ5Y-96Zy455qu,size_9,color_FFFFFF,t_70,g_se,x_16

附:對k-means算法的認(rèn)識

1.優(yōu)點(diǎn)

(1)算法快速、簡單。

(2)對大數(shù)據(jù)集有較高的效率并且是可伸縮性的。

(3)時(shí)間復(fù)雜度近于線性,而且適合挖掘大規(guī)模數(shù)據(jù)集。K-Means聚類算法的時(shí)間復(fù)雜度是O(nkt) ,其中n代表數(shù)據(jù)集中對象的數(shù)量,t代表著算法迭代的次數(shù),k代表著簇的數(shù)目。

2.缺點(diǎn)

(1)聚類是一種無監(jiān)督的學(xué)習(xí)方法,在 K-means 算法中 K 是事先給定的,K均值算法需要用戶指定創(chuàng)建的簇?cái)?shù)k,但這個(gè) K 值的選定是非常難以估計(jì)的。

(2)在 K-means 算法中,首先需要根據(jù)初始聚類中心來確定一個(gè)初始劃分,然后對初始劃分進(jìn)行優(yōu)化。這個(gè)初始聚類中心的選擇對聚類結(jié)果有較大的影響,一旦初始值選擇的不好,可能無法得到有效的聚類結(jié)果,這也成為 K-means算法的一個(gè)主要問題。

(3)從 K-means 算法框架可以看出,該算法需要不斷地進(jìn)行樣本分類調(diào)整,不斷地計(jì)算調(diào)整后的新的聚類中心,因此當(dāng)數(shù)據(jù)量非常大時(shí),算法的時(shí)間開銷是非常大的。所以需要對算法的時(shí)間復(fù)雜度進(jìn)行分析、改進(jìn),提高算法應(yīng)用范圍,而這導(dǎo)致K均值算法在大數(shù)據(jù)集上收斂較慢。

總結(jié)

到此這篇關(guān)于如何利用python實(shí)現(xiàn)kmeans聚類的文章就介紹到這了,更多相關(guān)python實(shí)現(xiàn)kmeans聚類內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • pytorch中backward()方法如何自動求梯度

    pytorch中backward()方法如何自動求梯度

    這篇文章主要介紹了pytorch中backward()方法如何自動求梯度問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • Python格式化字符串f-string的使用教程

    Python格式化字符串f-string的使用教程

    這篇文章主要為大家詳細(xì)介紹了Python中格式化字符串f-string的使用教程,文中通過示例為大家進(jìn)行了詳細(xì)的介紹,需要的可以參考一下
    2022-07-07
  • Python實(shí)現(xiàn)批量圖片的切割

    Python實(shí)現(xiàn)批量圖片的切割

    本文主要介紹了Python實(shí)現(xiàn)批量圖片的切割,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-09-09
  • PyCharm配置第三方鏡像源的解決方法

    PyCharm配置第三方鏡像源的解決方法

    在pycharm中配置第三方鏡像后,秩序搜索需要的第三方庫,就可以使用第三方鏡像下載,速度不是一般的快,這篇文章主要介紹了PyCharm配置第三方鏡像源,需要的朋友可以參考下
    2024-01-01
  • 在類Unix系統(tǒng)上開始Python3編程入門

    在類Unix系統(tǒng)上開始Python3編程入門

    這篇文章主要介紹了在類Unix系統(tǒng)上開始Python3編程入門,講解了最基礎(chǔ)最直觀的利用Print函數(shù)進(jìn)行各種輸出的方法,需要的朋友可以參考下
    2015-08-08
  • python實(shí)現(xiàn)xml轉(zhuǎn)json文件的示例代碼

    python實(shí)現(xiàn)xml轉(zhuǎn)json文件的示例代碼

    這篇文章主要介紹了python實(shí)現(xiàn)xml轉(zhuǎn)json文件的示例代碼,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-12-12
  • python中xml格式的轉(zhuǎn)換方法

    python中xml格式的轉(zhuǎn)換方法

    這篇文章主要為大家詳細(xì)介紹了python中xml格式的轉(zhuǎn)換方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • Python機(jī)器學(xué)習(xí)庫scikit-learn使用詳解

    Python機(jī)器學(xué)習(xí)庫scikit-learn使用詳解

    scikit-learn是Python中最流行的機(jī)器學(xué)習(xí)庫之一,它提供了各種各樣的機(jī)器學(xué)習(xí)算法和工具,包括分類、回歸、聚類、降維等
    2023-03-03
  • python調(diào)用API實(shí)現(xiàn)智能回復(fù)機(jī)器人

    python調(diào)用API實(shí)現(xiàn)智能回復(fù)機(jī)器人

    這篇文章主要為大家詳細(xì)介紹了python調(diào)用API實(shí)現(xiàn)智能回復(fù)機(jī)器人,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • 一文帶你理解Python中面向?qū)ο缶幊蘋OP的概念

    一文帶你理解Python中面向?qū)ο缶幊蘋OP的概念

    在Python中,面向?qū)ο缶幊蹋∣OP)是一種在編程中使用對象和類的編程范式,它旨在實(shí)現(xiàn)現(xiàn)實(shí)世界的實(shí)體,下面我們就一起來看看它的相關(guān)知識吧
    2023-08-08

最新評論