分享python機(jī)器學(xué)習(xí)中應(yīng)用所產(chǎn)生的聚類(lèi)數(shù)據(jù)集方法

01直接生成
這類(lèi)方法是利用基本程序軟件包numpy的隨機(jī)數(shù)產(chǎn)生方法來(lái)生成各類(lèi)用于聚類(lèi)算法數(shù)據(jù)集合,也是自行制作輪子的生成方法。
一、基礎(chǔ)類(lèi)型
1、月牙形數(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')
2、方形數(shù)據(jù)集

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')
3、螺旋形數(shù)據(jù)集合

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ù)集合為:


02樣本生成器
利用sklearn.datasets自帶的樣本生成器來(lái)生成相應(yīng)的數(shù)據(jù)集合。
一、基礎(chǔ)數(shù)據(jù)集
1、點(diǎn)簇形數(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)
2、線簇形數(shù)據(jù)集合

生成代碼,只要在前面的x1后面使用旋轉(zhuǎn)矩陣。
transformation = [[0.60834549, -0.63667341], [-0.40887718, 0.85253229]] x1 = dot(x1, transformation)
其中轉(zhuǎn)換矩陣的特征值與特征向量為:
- 特征值:[0.20581711.25506068]
- 特征向量:[[-0.845237740.7015526][-0.53439045-0.71261768]]
3、環(huán)形數(shù)據(jù)集合

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')
4、月牙數(shù)據(jù)集合

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')
測(cè)試結(jié)論
sklearn里面還有好多函數(shù)來(lái)自定制數(shù)據(jù),除此之外還可以使用numpy生成,然后通過(guò)高級(jí)索引進(jìn)行劃分,最好結(jié)合著matplotlib中的cmap來(lái)做顏色映射,這樣可以做出好玩又好看的數(shù)據(jù)集,希望大家以后多多支持腳本之家!
相關(guān)文章
Java多線程編程中ThreadLocal類(lèi)的用法及深入
這篇文章主要介紹了Java多線程編程中ThreadLocal類(lèi)的用法及深入,嘗試了自己實(shí)現(xiàn)一個(gè)ThreadLocal類(lèi)以及對(duì)相關(guān)的線程安全問(wèn)題進(jìn)行討論,需要的朋友可以參考下2016-06-06
使用Pandas計(jì)算系統(tǒng)客戶名稱的相似度
在日常業(yè)務(wù)處理中,我們經(jīng)常會(huì)面臨將不同系統(tǒng)中的數(shù)據(jù)進(jìn)行匹配和比對(duì)的情況,本文將介紹如何使用Python的Pandas庫(kù)來(lái)處理這個(gè)問(wèn)題,需要的可以參考一下2023-07-07
Python wxPython庫(kù)使用wx.ListBox創(chuàng)建列表框示例
這篇文章主要介紹了Python wxPython庫(kù)使用wx.ListBox創(chuàng)建列表框,結(jié)合實(shí)例形式分析了wxPython庫(kù)使用wx.ListBox創(chuàng)建列表框的簡(jiǎn)單實(shí)現(xiàn)方法及ListBox函數(shù)相關(guān)選項(xiàng)的功能,需要的朋友可以參考下2018-09-09
Python?Decorator裝飾器的創(chuàng)建方法及常用場(chǎng)景分析
這篇文章主要介紹了Python?Decorator裝飾器的創(chuàng)建方法及常用場(chǎng)景,裝飾器可以分成方法裝飾器和類(lèi)裝飾器,他們的區(qū)別是一個(gè)是用函數(shù)實(shí)現(xiàn)的裝飾器,一個(gè)是用類(lèi)實(shí)現(xiàn)的裝飾器,他們也都能在方法和類(lèi)上進(jìn)行裝飾,需要的朋友可以參考下2022-07-07

