python scatter 简书_【挖掘模型】:Python-DBSCAN算法 - 简书
數據源:data (7).csv
data (7).csv
DBSCAN算法結果
DBSCAN模型
DBSCAN原理 # DBSCAN算法:將簇定義為密度相連的點最大集合,能夠把具有足夠高密度的區域劃分為簇,并且可在噪聲的空間數據集中發現任意形狀的簇。
# 密度:空間中任意一點的密度是以該點為圓心,以EPS為半徑的圓區域內包含的點數目
# 邊界點:空間中某一點的密度,如果小于某一點給定的閾值minpts,則稱為邊界點
# 噪聲點:不屬于核心點,也不屬于邊界點的點,也就是密度為1的點
# API:
# model = sklearn.cluster.DBSCAN(eps_領域大小圓半徑,min_samples_領域內,點的個數的閾值)
# model.fit(data) 訓練模型
# model.fit_predict(data) 模型的預測方法
DBSCAN代碼-A import pandas
import matplotlib.pyplot as plt
from sklearn.cluster import DBSCAN
#導入數據
data = pandas.read_csv("F:\\python 數據挖掘分析實戰\\Data\\data (7).csv")
eps = 0.2;
MinPts = 5;
model = DBSCAN(eps, MinPts)
model.fit(data)
data['type'] = model.fit_predict(data)
plt.scatter(
data['x'],
data['y'],
c=data['type']
)
DBSCAN代碼-B import numpy
import pandas
import matplotlib.pyplot as plt
#導入數據
data = pandas.read_csv("F:\\python 數據挖掘分析實戰\\Data\\data (7).csv")
plt.scatter(
data['x'],
data['y']
)
eps = 0.2;
MinPts = 5;
from sklearn.metrics.pairwise import euclidean_distances
ptses = []
dist = euclidean_distances(data)
for row in dist:
#密度,空間中任意一點的密度是以該點為圓心、以 Eps 為半徑的圓區域內包含的點數
density = numpy.sum(row
pts = 0;
if density>MinPts:
#核心點(Core Points)
#空間中某一點的密度,如果大于某一給定閾值MinPts,則稱該為核心點
pts = 1
elif density>1 :
#邊界點(Border Points)
#空間中某一點的密度,如果小于某一給定閾值MinPts,則稱該為邊界點
pts = 2
else:
#噪聲點(Noise Points)
#數據集中不屬于核心點,也不屬于邊界點的點,也就是密度值為1的點
pts = 0
ptses.append(pts)
#把噪聲點過濾掉,因為噪聲點無法聚類,它們獨自一類
corePoints = data[pandas.Series(ptses)!=0]
coreDist = euclidean_distances(corePoints)
#首先,把每個點的領域都作為一類
#鄰域(Neighborhood)
#空間中任意一點的鄰域是以該點為圓心、以 Eps 為半徑的圓區域內包含的點集合
cluster = dict();
i = 0;
for row in coreDist:
cluster[i] = numpy.where(row
i = i + 1
#然后,將有交集的領域,都合并為新的領域
for i in range(len(cluster)):
for j in range(len(cluster)):
if len(set(cluster[j]) & set(cluster[i]))>0 and i!=j:
cluster[i] = list(set(cluster[i]) | set(cluster[j]))
cluster[j] = list();
#最后,找出獨立(也就是沒有交集)的領域,就是我們最后的聚類的結果了
result = dict();
j = 0
for i in range(len(cluster)):
if len(cluster[i])>0:
result[j] = cluster[i]
j = j + 1
#找出每個點所在領域的序號,作為他們最后聚類的結果標記
for i in range(len(result)):
for j in result[i]:
data.at[j, 'type'] = i
plt.scatter(
data['x'],
data['y'],
c=data['type']
) 參考文獻
作者A: ken
總結
以上是生活随笔為你收集整理的python scatter 简书_【挖掘模型】:Python-DBSCAN算法 - 简书的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电视找不到hdp怎么办
- 下一篇: 服务器管理面板是什么