需要源码请点赞关注收藏后评论区留言私信~~~
一、基于密度的聚类
基于密度的聚类算法的主要思想是:只要邻近区域的密度(对象或数据点的数目)超过某个阀值,就把它加到与之相近的聚类中。也就是说,对给定类中的每个数据点,在一个给定范围的区域中必须至少包含某个数目的点
基于密度的聚类算法代表算法有:DBSCAN算法、OPTICS算法及DENCLUE算法等
DBSCAN算法涉及2个参数5个定义
1)2个参数: Eps: 邻域最大半径 MinPts: 在 Eps 邻域中的最少点数
5个定义见下表:
可以发现,密度可达是直接密度可达的传递闭包,并且这种关系是非对称的,只有核心对象之间相互密度可达。DBSCAN算法的目的是找到所有的相互密度相连对象的最大集合
2. DBSCAN算法
DBSCAN算法实现
部分代码如下
from sklearn import datasets
import numpy as np
import random
import matplotlib.pyplot as plt
def findNeighbor(j,X,eps):
N = []
for p in range(X.shape[0]): #找到所有邻域内对象
temp = np.sqrt(np.sum(np.square(X[j]-X[p]))) #欧氏距离
if(temp<=eps):
N.append(p)
return N
def dbscan(X,eps,min_Pts):
k = -1
NeighborPts = [] #array,某点领域内的对象
Ner_NeighborPts = []
fil = [] #初始时已访问对象列表为空
gama = [x for x in range(len(X))] #初始时将所有点标记为未访问
cluster = [-1 for y in range(len(X))]
while len(gama)>0:
j = random.choice(gama)
gama.remove(j) #未访问列表中移除
fil.append(j) #添加入访问列表
NeighborPts = findNeighbor(j,X,eps)
if len(NeighborPts) < min_Pts:
cluster[j] = -1 #标记为噪声点
else:
k = k+1
cluster[j] = k
for i in NeighborPts:
if i not in fil:
gama.remove(i)
fil.append(i)
Ner_NeighborPts=findNeighbor(i,X,eps)
if len(Ner_NeighborPts) >= min_Pts:
for a in Ner_NeighborPts:
X1, y1 = datasets.make_circles(n_samples=1000, factor=.6,noise=.05)
X2, y2 = datasets.make_blobs(n_samples = 300, n_features = 2, centers = [[1.2,1.2]], cluster_std = [[.1]],random_state = 9)
X = np.concatenate((X1, X2))
eps = 0.08
min_Pts = 10
C = dbscan(X,eps,min_Pts)
plt.figure(figsize = (12, 9), dpi = 80)
plt.scatter(X[:,0],X[:,1],c = C)
plt.show()
二、主成分分析PCA
主成分分析(Principal Component Analysis,PCA)是最常用的一种降维方法,通常用于高维数据集的探索与可视化,还可以用作数据压缩和预处理等。在数据压缩消除冗余和数据噪音消除等领域也有广泛的应用
PCA顾名思义,就是找出数据里最主要的方面,用数据里最主要的方面来代替原始数据。具体的,假如我们的数据集是n维的,共有m个数据(x(1),x(2),...,x(m))(x(1),x(2),...,x(m))
我们希望将这m个数据的维度从n维降到n'维,希望这m个n'维的数据集尽可能的代表原始数据集
PCA算法
sklearn实现实现鸢尾花数据进行降维,将原来4维的数据降维为2维
结果如下
部分代码如下
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
from sklearn.datasets import load_iris
data = load_iris()
y = data.target
x = data.data
pca = PCA(n_ponents = 2)
#加载PCA算法设置降维后主成分数目为2
reduced_x = pca.fit_transform(x) #对样本进行降维
reduced_x
red_x,red_y = [],[]
blue_x,blue_y = [],[]
green_x,green_y = [],[]
for i in range(len(reduced_x)):
if y[i] ==0:
red_x.append(reduced_x[i][0])
red_y.append(reduced_x[i][1])
elif y[i]==1:
blue_x.append(reduced_x[i][0])
blue_y.append(reduced_x[i][1])
else:
green_x.appen_y,c='b',marker='D')
plt.scatter(green_x,green_y,c='g',marker='.')
plt.show()
创作不易 觉得有帮助请点赞关注收藏~~~