层次聚类python实现_层次聚类和随机森林(python实现)

层次聚类步骤:

假设有N个待聚类的样本,对于层次聚类来说,基本步骤就是:

1、(初始化)把每个样本归为一类,计算每两个类之间的距离,也就是样本与样本之间的相似度;

2、按一定规则选取符合距离要求的类别,完成类间合并;

3、重新计算新生成的这个类与各个旧类之间的相似度;

4、重复2和3直到所有样本点都归为一类,结束。

随机森林步骤:

从原始训练集中使用Bootstraping方法随机有放回采样选出m个样本,共进行n_tree次采样,生成n_tree个训练集

对于n_tree个训练集,我们分别训练n_tree个决策树模型

对于单个决策树模型,假设训练样本特征的个数为n,那么每次分裂时根据信息增益/信息增益比/基尼指数选择最好的特征进行分裂

每棵树都一直这样分裂下去,直到该节点的所有训练样例都属于同一类。在决策树的分裂过程中不需要剪枝

将生成的多棵决策树组成随机森林。对于分类问题,按多棵树分类器投票决定最终分类结果;对于回归问题,由多棵树预测值的均值决定最终预测结果

代码实现:

代码介绍:定义一个Groundwater_Classification 类  ,deal_datesets是处理数据集,test_RandomForestClassifier是随机森林处理,Hcluster是层次聚类部分代码

self.x_train是训练数据特征也就是特征  self.y_train是训练的标记也就是label,self.x_test是测试的特征

import scipy.cluster.hierarchy as sch

import matplotlib.pylab as plt

import pandas as pd

from sklearn.ensemble import RandomForestClassifier

class Groundwater_Classification():

def __init__(self, num, n_estimators = 100,n_cluster = 8):

self.x_train = None

self.x_test = None

self.y_train = None

self.num = num

self.n_estimators = n_estimators

self.n_cluster = n_cluster

# 处理数据集

def deal_datasets(self):

pd1 = pd.read_csv("../second1_17.csv", header=None, sep=" ")

j = 0

gap = self.num

l = []

for i in range(10):

h = j + gap

x1 = pd1.iloc[:, j:h]

l.append(x1)

j += 1440

self.x_train = pd.concat(l, axis=1)

def test_RandomForestClassifier(self):

# 随机森林进行预测

rf = RandomForestClassifier(n_estimators=500)

rf.fit(self.x_train, self.y_train)

l = rf.predict_proba(self.x_train)

print("随机森林训练数据准确率:", rf.score(self.x_train, self.y_train))

print("随机森林预测测试数据概率",l)

def Hcluster(self):

# 1. 层次聚类

# 生成点与点之间的距离矩阵,这里用的欧氏距离:

disMat = sch.distance.pdist(self.x_train, 'euclidean')

# 进行层次聚类:

Z = sch.linkage(disMat, method='average')

# 将层级聚类结果以树状图表示出来并保存为plot_dendrogram.png

P = sch.dendrogram(Z)

plt.savefig('plot_dendrogram_{}.png'.format(self.num))

# 根据linkage matrix Z得到聚类结果:

cluster = sch.fcluster(Z, t=1, criterion='distance')

self.y_train = cluster

print("Original cluster by hierarchy clustering:\n", cluster)

# for i in range(1,11):

# print("num = ",i)

gc = Groundwater_Classification(num=720, n_estimators=500,n_cluster=8)

gc.deal_datasets()

gc.Hcluster()

gc.test_RandomForestClassifier()

上图是层次聚类的结果,纵坐标是距离,横坐标是样本标号

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值