日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

LVQ模型Python实现

發(fā)布時間:2025/4/16 python 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LVQ模型Python实现 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
  • https://github.com/Sean16SYSU/MachineLearningImplement

簡述

LVQ模型是聚類的經典模型,跟Kmeans有點像。但是作為一個聚類,這個模型是一個有監(jiān)督的模型。

算法流程

  • 輸入的數(shù)據(jù)集X, y,還有學習率(在0,1之間)η\etaη
  • 初始,選k個點,作為原型向量
  • 然后開始循環(huán)
  • 在樣本集中隨機選個點。
  • 找到在原型向量中離它最近的點
  • 然后來比較這兩個點之間的y是否一樣。一樣就正向更新節(jié)點,不一樣就反向更新節(jié)點
  • pi=pi(+/?)η?(xj?pi)p_i = p_i (+ / -) \eta * (x_j- p_i)pi?=pi?(+/?)η?(xj??pi?) 中間選是加或者減。
  • 迭代一定的次數(shù),或者變化足夠小之后,就退出迭代
  • 實驗部分

    • 導入數(shù)據(jù)
    from sklearn import datasets iris = datasets.load_iris()
    • 數(shù)據(jù)規(guī)模測試
    iris.data.shape, iris.target.shape

    ((150, 4), (150,))

    • 隨機挑選節(jié)點作為訓練集合
    import numpy as npdef random_split(X, y, train_rate=0.3):y_ = np.array(list(zip(y, range(len(y)))))np.random.shuffle(y_)train_n = int(len(y) * train_rate)y_train = y_[:train_n]y_test = y_[train_n:]index_train = y_train[:, 1]index_test = y_test[:, 1]return X[index_train], y_train[:, 0], X[index_test], y_test[:, 0]
    • LVQ函數(shù)和LVQ的聚類函數(shù)
    def LVQ(X, y, k, MAX_TIME=100, ita=0.2):init_index = np.random.choice(len(y), k)px = X[init_index]py = y[init_index]for _ in range(MAX_TIME):j = np.random.choice(len(y), 1)xj, yj = X[j], y[j]i = np.argmin([np.linalg.norm(xj - pi) for pi in px])pyi = py[i]if pyi == yj:px[i] = px[i] + ita * (xj - px[i])else:px[i] = px[i] - ita * (xj - px[i])return pxdef PVQ_clustering(X, px):return np.array(list(map(lambda x: np.argmin([np.linalg.norm(x - pi) for pi in px]), X)))
    • 拆分數(shù)據(jù)集并訓練
    train_x, train_y, test_x, test_y = random_split(iris.data, iris.target) px = LVQ(train_x, train_y, 3) y = PVQ_clustering(test_x, px)
    • 畫圖
    import matplotlib.pyplot as plt from sklearn.decomposition import PCAX_reduced = PCA(n_components=2).fit_transform(test_x) plt.scatter(X_reduced[:, 0], X_reduced[:, 1], c=y, cmap=plt.cm.Set1)

    • 實際值

    • 算法估量:這里只考慮外部指標
    def evaluate(y, t):a, b, c, d = [0 for i in range(4)]for i in range(len(y)):for j in range(i+1, len(y)):if y[i] == y[j] and y[j] == t[j]:a += 1elif y[i] == y[j] and y[j] != t[j]:b += 1elif y[i] != y[j] and y[j] == t[j]:c += 1elif y[i] != y[j] and y[j] != t[j]:d += 1return a, b, c, d a, b, c, d = evaluate(y, test_y) def external_index(a, b, c, d, m):JC = a / (a + b + c)FMI = np.sqrt(a**2 / ((a + b) * (a + c)))RI = 2 * ( a + d ) / ( m * (m + 1) )return JC, FMI, RI external_index(a, b, c, d, len(y))
    • 將最后的結果展示下
    External indexValue
    JC0.1485971596813301
    FMI0.26021571720401077
    RI0.5394429469901169

    總結

    以上是生活随笔為你收集整理的LVQ模型Python实现的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。