這類方法是利用基本程序軟件包numpy的隨機(jī)數(shù)產(chǎn)生方法來(lái)生成各類用于聚類算法數(shù)據(jù)集合,也是自行制作輪子的生成方法。
from headm import * import numpy as np pltgif = PlotGIF() def moon2Data(datanum): x1 = linspace(-3, 3, datanum) noise = np.random.randn(datanum) * 0.15 y1 = -square(x1) / 3 + 4.5 + nois x2 = linspace(0, 6, datanum) noise = np.random.randn(datanum) * 0.15 y2 = square(x2 - 3) / 3 + 0.5 + noise plt.clf() plt.axis([-3.5, 6.5, -.5, 5.5]) plt.scatter(x1, y1, s=10) plt.scatter(x2, y2, s=10) plt.draw() plt.pause(.1) pltgif.append(plt) for _ in range(20): moon2Data(300) pltgif.save(r'd:\temp\GIF1.GIF')
from headm import * import numpy as np pltgif = PlotGIF() def moon2Data(datanum): x = np.random.rand(datanum, 2) condition1 = x[:, 1] = x[:, 0] condition2 = x[:, 1] = (1-x[:, 0]) index1 = np.where(condition1 condition2) x1 = x[index1] x = np.delete(x, index1, axis=0) index2 = np.where(x[:, 0] = 0.5) x2 = x[index2] x3 = np.delete(x, index2, axis=0) plt.clf() plt.scatter(x1[:, 0], x1[:, 1], s=10) plt.scatter(x2[:, 0], x2[:, 1], s=10) plt.scatter(x3[:, 0], x3[:, 1], s=10) plt.draw() plt.pause(.1) pltgif.append(plt) for _ in range(20): moon2Data(1000) pltgif.save(r'd:\temp\GIF1.GIF')
from headm import * import numpy as np pltgif = PlotGIF() def randData(datanum): t = 1.5 * pi * (1+3*random.rand(1, datanum)) x = t * cos(t) y = t * sin(t) X = concatenate((x,y)) X += 0.7 * random.randn(2, datanum) X = X.T norm = plt.Normalize(y.min(), y.max()) plt.clf() plt.scatter(X[:, 0], X[:, 1], s=10, c=norm(X[:,0]), cmap='viridis') plt.axis([-20, 21, -20, 16]) plt.draw() plt.pause(.1) pltgif.append(plt) for _ in range(20): randData(1000) pltgif.save(r'd:\temp\GIF1.GIF')
下面的知識(shí)螺旋線,沒(méi)有隨機(jī)移動(dòng)的點(diǎn)。
將隨機(jī)幅值從原來(lái)的0.7增大到1.5,對(duì)應(yīng)的數(shù)據(jù)集合為:
利用sklearn.datasets自帶的樣本生成器來(lái)生成相應(yīng)的數(shù)據(jù)集合。
from headm import * from sklearn.datasets import make_blobs pltgif = PlotGIF() def randData(datanum): x1,y1 = make_blobs(n_samples=datanum, n_features=2, centers=3, random_state=random.randint(0, 1000)) plt.clf() plt.scatter(x1[:,0], x1[:, 1], c=y1, s=10) plt.draw() plt.pause(.1) pltgif.append(plt) for _ in range(20): randData(300) pltgif.save(r'd:\temp\gif1.gif')
繪制三簇點(diǎn)集合,也可以使用如下的語(yǔ)句:
plt.scatter(x1[y1==0][:,0], x1[y1==0][:,1], s=10) plt.scatter(x1[y1==1][:,0], x1[y1==1][:,1], s=10) plt.scatter(x1[y1==2][:,0], x1[y1==2][:,1], s=10)
生成代碼,只要在前面的x1后面使用旋轉(zhuǎn)矩陣。
transformation = [[0.60834549, -0.63667341], [-0.40887718, 0.85253229]] x1 = dot(x1, transformation)
其中轉(zhuǎn)換矩陣的特征值與特征向量為:
from headm import * from sklearn.datasets import make_circles pltgif = PlotGIF() def randData(datanum): x1,y1 = make_circles(n_samples=datanum, noise=0.07, random_state=random.randint(0, 1000), factor=0.6) plt.clf() plt.scatter(x1[y1==0][:,0], x1[y1==0][:,1], s=10) plt.scatter(x1[y1==1][:,0], x1[y1==1][:,1], s=10) plt.axis([-1.2, 1.2, -1.2, 1.2]) plt.draw() plt.pause(.1) pltgif.append(plt) for _ in range(20): randData(1000) pltgif.save(r'd:\temp\gif1.gif')
from headm import * from sklearn.datasets import make_moons pltgif = PlotGIF() def randData(datanum): x1,y1 = make_moons(n_samples=datanum, noise=0.07, random_state=random.randint(0, 1000)) plt.clf() plt.scatter(x1[y1==0][:,0], x1[y1==0][:,1], s=10) plt.scatter(x1[y1==1][:,0], x1[y1==1][:,1], s=10) plt.axis([-1.5, 2.5, -1, 1.5]) plt.draw() plt.pause(.1) pltgif.append(plt) for _ in range(20): randData(1000) pltgif.save(r'd:\temp\gif1.gif')
sklearn里面還有好多函數(shù)來(lái)自定制數(shù)據(jù),除此之外還可以使用numpy生成,然后通過(guò)高級(jí)索引進(jìn)行劃分,最好結(jié)合著matplotlib中的cmap來(lái)做顏色映射,這樣可以做出好玩又好看的數(shù)據(jù)集,希望大家以后多多支持腳本之家!
標(biāo)簽:大同 林芝 寧夏 普洱 南平 漯河 盤錦 海南
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《分享python機(jī)器學(xué)習(xí)中應(yīng)用所產(chǎn)生的聚類數(shù)據(jù)集方法》,本文關(guān)鍵詞 分享,python,機(jī)器,學(xué)習(xí),中,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。