Python机器学习---2.聚类分析代码部分
生活随笔
收集整理的這篇文章主要介紹了
Python机器学习---2.聚类分析代码部分
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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模擬數據
# 模擬出一些數據集出來 #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'])
因為聚類分析是無監督學習方式,所以在代碼中不需要y值,都只有x值就好了。所以drop彈出y
取出最大值與最小值
隨機產生3個介于最大值與最小值之間的數(這樣寫代碼更有拓展性,實用性強)
#這樣的代碼實用性會更強,上面只適用于X1和X2 # 這個代碼可以適用于所有數據 l = [] for i in data_content.columns:l.append(np.random.uniform(range_info[i]['min'],range_info[i]['max'],3)) l這個作為初始的聚類中心點的位置,介于最大值與最小值之間
轉成表格DataFrame
這3個初始值的聚類中心點就是
(1.796770 ,-0.384921)
(-0.119144, -0.497739)
(1.258498, -0.322896)
因為for循環有對大數據不采用,所以這里教一種減少循環次數的方法
這個是取出k個隨機的介于最大值和最小值之間的數
這個比上一個更有拓展性,可以外部設置K值(聚類點數)
# 使用列表解析式寫出一個更加有拓展性的代碼 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
封裝成函數,之后就可以直接用了,datasets是數據集
測試一下封裝好的包
centers = initial_centers(datasets = datasets, k = 3) centers總結
以上是生活随笔為你收集整理的Python机器学习---2.聚类分析代码部分的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python机器学习---2.聚类算法理
- 下一篇: Python机器学习---Pyechar