今天我正在处理来自Kagglehttps://www.kaggle.com/c/house-prices-advanced-regression-techniques/data的数据集。我想将我的数据集按床、浴室、邻居进行细分,并使用DBSCAN在每个细分中按价格进行聚类。问题是因为每个片段都是不同的,我不想对我的所有数据集使用相同的epsilon,但是对于每个片段,最好的epsilon,你知道一种有效的方法吗
from sklearn.cluster import DBSCAN
import sklearn.utils
from sklearn.preprocessing import StandardScaler
sklearn.utils.check_random_state(1000)
Clus_dataSet = pdf[['beds','baths','neighborhood','price']]
Clus_dataSet = np.nan_to_num(Clus_dataSet)
Clus_dataSet = StandardScaler().fit_transform(Clus_dataSet)
# Compute DBSCAN
db = DBSCAN(eps=0.3, min_samples=6).fit(Clus_dataSet)
core_samples_mask = np.zeros_like(db.labels_, dtype=bool)
core_samples_mask[db.core_sample_indices_] = True
labels = db.labels_
pdf["Clus_Db"]=labels
realClusterNum=len(set(labels)) - (1 if -1 in labels else 0)
clusterNum = len(set(labels))
多谢各位
提出了一种设置Epsilon和MinPts参数的启发式方法in the original DBSCAN paper
一旦设置了MinPts值(例如2∗ 特征数)分区结果强烈依赖于Epsilon。启发式建议通过视觉分析k-dist图来推断ε
下面是一个具有两个高斯分布的程序示例
在生成的k-dist图中,“弯头”从理论上将噪声对象与簇对象分开,并且确实给出了ε值的合理范围的指示(根据数据集结合所选的MinPts值进行定制)。在这个玩具示例中,我会说介于0.05和0.075之间
相关问题 更多 >
编程相关推荐