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

歡迎訪問 生活随笔!

生活随笔

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

python

Python机器学习---2.聚类分析代码部分

發(fā)布時間:2023/12/15 python 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python机器学习---2.聚类分析代码部分 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1. 手寫?個簡單的Kmeans算法

導入所需要的包

# 導入一些包 import numpy as np import pandas as pd import matplotlib as mpl import matplotlib.pyplot as plt %matplotlib inline from sklearn.datasets import make_blobs

模擬數(shù)據(jù)

# 模擬出一些數(shù)據(jù)集出來 #r = np.random.randint(1,100) r = 4 #print(r) k = 3 x , y = make_blobs(n_samples = 300,cluster_std = [0.3, 0.3, 0.3],centers = [[0,0],[1,1],[-1,1]],random_state = r) sim_data = pd.DataFrame(x, columns = ['x1', 'x2']) sim_data['label'] = y sim_data.head(5)datasets = sim_data.copy()plt.scatter(sim_data['x1'], sim_data['x2'])


因為聚類分析是無監(jiān)督學習方式,所以在代碼中不需要y值,都只有x值就好了。所以drop彈出y
取出最大值與最小值

data_content = datasets.drop('label',axis=1) range_info =data_content.describe().loc[['min','max'],:]

隨機產(chǎn)生3個介于最大值與最小值之間的數(shù)(這樣寫代碼更有拓展性,實用性強)

#這樣的代碼實用性會更強,上面只適用于X1和X2 # 這個代碼可以適用于所有數(shù)據(jù) l = [] for i in data_content.columns:l.append(np.random.uniform(range_info[i]['min'],range_info[i]['max'],3)) l

這個作為初始的聚類中心點的位置,介于最大值與最小值之間

轉成表格DataFrame

pd.DataFrame(l,index = data_content.columns).T


這3個初始值的聚類中心點就是
(1.796770 ,-0.384921)
(-0.119144, -0.497739)
(1.258498, -0.322896)
因為for循環(huán)有對大數(shù)據(jù)不采用,所以這里教一種減少循環(huán)次數(shù)的方法

# 列表解析式 [np.random.uniform(range_info[i]['min'],range_info[i]['max'],3) for i in data_content.columns]


這個是取出k個隨機的介于最大值和最小值之間的數(shù)

# 從i的最大最小中隨機生成k個數(shù) np.random.uniform(range_info[i]['min'],range_info[i]['max'],k)

這個比上一個更有拓展性,可以外部設置K值(聚類點數(shù))

# 使用列表解析式寫出一個更加有拓展性的代碼 k = 4 k_randoms = [np.random.uniform(range_info[i]['min'], range_info[i]['max'], k) for i in data_content.columns] k_randoms

轉成表格形式

# 將最后的k_randoms轉化成dataframe的格式 centers = pd.DataFrame(k_randoms, index = data_content.columns).T centers


封裝成函數(shù),之后就可以直接用了,datasets是數(shù)據(jù)集

# 上面的都測試好之后,我們就可以把它寫出一個函數(shù) def initial_centers(datasets, k = 3):data_content = datasets.drop('label', axis = 1)range_info = data_content.describe().loc[['min', 'max'], :]k_randoms = [np.random.uniform(range_info[i]['min'], range_info[i]['max'], k) for i in data_content.columns]centers = pd.DataFrame(k_randoms, index = data_content.columns).Treturn centers

測試一下封裝好的包

centers = initial_centers(datasets = datasets, k = 3) centers

總結

以上是生活随笔為你收集整理的Python机器学习---2.聚类分析代码部分的全部內容,希望文章能夠幫你解決所遇到的問題。

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