需要源码请点赞关注收藏后评论区留言私信~~~
一、基于密度的聚类
基于密度的聚类算法的主要思想是:只要邻近区域的密度(对象或数据点的数目)超过某个阀值,就把它加到与之相近的聚类中。也就是说,对给定类中的每个数据点,在一个给定范围的区域中必须至少包含某个数目的点
基于密度的聚类算法代表算法有: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()
创作不易 觉得有帮助请点赞关注收藏~~~