<option id="mwy0y"><strong id="mwy0y"></strong></option>
  • <ul id="mwy0y"><sup id="mwy0y"></sup></ul>
  • <ul id="mwy0y"></ul>
  • <del id="mwy0y"><dfn id="mwy0y"></dfn></del><ul id="mwy0y"><sup id="mwy0y"></sup></ul>
  • <abbr id="mwy0y"></abbr>

    千鋒教育-做有情懷、有良心、有品質的職業教育機構

    400-811-9990
    手機站
    千鋒教育

    千鋒學習站 | 隨時隨地免費學

    千鋒教育

    掃一掃進入千鋒手機站

    領取全套視頻
    千鋒教育

    關注千鋒學習站小程序
    隨時隨地免費學習課程

    上海
    • 北京
    • 鄭州
    • 武漢
    • 成都
    • 西安
    • 沈陽
    • 廣州
    • 南京
    • 深圳
    • 大連
    • 青島
    • 杭州
    • 重慶
    當前位置:長沙千鋒IT培訓  >  技術干貨  >  Python中使用K-means算法

    Python中使用K-means算法

    來源:千鋒教育
    發布人:xqq
    時間: 2023-11-09 10:42:22

    python中使用K-means算法

    k-means是機器學習中最常用的聚類算法,關于k-means算法的數學原理、算法、偽碼等已有相當豐富的文獻,在此不再贅述。

    1、調用以下庫

    importnumpyasnp#用于抽樣和生成隨機數

    fromsklearn.clusterimportKMeans#sklearn自帶的Kmeans算法,用于嚴重本文算法結果是否正確

    importmatplotlib.pyplotasplt#結果可視化

    importsys#需要用到sys.exit()函數

    若不需要驗證聚類結果是否可以不使用Sklearn庫。

    2、生成用于訓練的隨機數據

    np.set_printoptions(suppress=True)#令numpy的結果不以科學計數法的方式輸出

    Data=np.array([[1.0,2.0],[1.5,1.8],[3,4],[6,8],[8,8],[1,0.6],

    [9,11],[7,10]])#你也可以通過抽樣的方式來更快的獲得測試數據

    3、定義用于選擇隨機初始點和簇數(k)的函數

    defK_means(data,k):

    globalMean

    mean=[]

    a=np.max(data[:,0])

    b=np.min(data[:,0])

    c=np.max(data[:,1])

    d=np.min(data[:,1])

    foriinrange(k):

    x=np.random.uniform(a,b,1)

    #此處返回array

    y=np.random.uniform(c,d,1)#此處返回array

    mean.append([float(x),float(y)])

    Mean=np.array(mean)

    returnMean

    在上面的代碼中,為了限定初始點(x,y)的位置不會超出樣本點的范圍,因此均勻抽樣的上下限是指訓練數據(a,b)和(c,d)的最小橫距。

    4、定義可視化函數,繪制測試數據散點圖

    defvision(data,cell):

    plt.figure(figsize=(12,6))

    ax1=plt.subplot(121)

    ax1.scatter(Data[:,0],Data[:,1])#原始數據散點圖

    ax1.scatter(point[:,0],point[:,0])#同時將隨機選取的初始點表示出來

    plt.xlabel("x")

    plt.ylabel("y")

    plt.title("scatterof"+"rural"+"data")

    ax2=plt.subplot(122)

    ax2.scatter(Data[:,0],Data[:,1])#原始數據散點圖

    ax2.scatter(data[:,0],data[:,1])#經過迭代后最終確定的聚類點

    plt.xlabel("x")

    plt.ylabel("y")

    plt.title("scatterof"+cell+"data")

    plt.show()

    聚類結果的可視化對于判斷聚類結果的準確性至關重要。

    5、定義迭代過程,通過不斷計算各個樣本對聚類點的歐式聚類,來不斷更新聚類點

    defiteration(Data,point):

    A=[]

    B=[]

    foriinrange(len(Data)):

    d1=np.sqrt(sum(pow(Data[i]-point[0],2)))

    d2=np.sqrt(sum(pow(Data[i]-point[1],2)))

    ifd1>d2:

    A.append(list(Data[i]))

    else:

    B.append(list(Data[i]))

    iflen(A)==len(Data)orlen(B)==len(Data):

    print("初始化錯誤")

    sys.exit(0)

    new_x1=np.mean(np.array(A)[:,0])

    new_y1=np.mean(np.array(A)[:,1])

    new_x2=np.mean(np.array(B)[:,0])

    new_y2=np.mean(np.array(B)[:,1])

    new_point=np.array([[new_x1,new_y1],[new_x2,new_y2]])

    returnnew_point

    注意,上段代碼中加入了一個if語句

    iflen(A)==len(Data)orlen(B)==len(Data):

    print("初始化錯誤")

    sys.exit(0)

    由于初始點是隨機產生的,所以這個條件語句是非常必要的,因此有可能所有的樣本點都只接近一個聚類中心而遠離另一個聚類中心,這樣就不能形成兩個聚類中心,程序將會報錯,因此我們需要排除出現這種情況的可能性。一旦所有樣本點都接近一個聚類中心時令程序停止。

    以上就是Python中使用K-means算法,希望能對大家有所幫助!更多Python學習教程請關注IT培訓機構:千鋒教育。

    聲明:本站稿件版權均屬千鋒教育所有,未經許可不得擅自轉載。

    猜你喜歡LIKE

    python實現WSGI的框架

    2023-11-13

    python打開文本文件有哪些方法?

    2023-11-13

    python使用loguru操作日志

    2023-11-13

    最新文章NEW

    python-=是什么意思

    2023-11-13

    pythonre是什么?

    2023-11-13

    python列表追加元素出錯的解決

    2023-11-13

    相關推薦HOT

    更多>>

    快速通道 更多>>

    最新開班信息 更多>>

    網友熱搜 更多>>