数据挖掘与机器学习-第六章 无监督学习


数据挖掘与机器学习-第六章 无监督学习

无监督学习

image-20220501190951624

image-20220501191007822 image-20220501191415249 image-20220501191433623

聚类算法

聚类算法概述

概述

image-20220501191820991 image-20220501193524211

聚类算法的功能

image-20220501192004496

应用场景

image-20220501192136152

聚类算法评判指标

image-20220501192338381

聚类中的数据结构

image-20220501192727185

image-20220501193145739

image-20220501193302490

image-20220501193651567 image-20220501193917612 image-20220501193958301 image-20220501194602336 image-20220501194631285

划分聚类

image-20220501201310322 image-20220501201335554

image-20220501201535367

image-20220501201928871

image-20220501202124441

image-20220501202300544

image-20220501202448532

image-20220501202723681

K-means的结束

image-20220501203112501

image-20220501203347291

初始质心对K-means聚类的影响

image-20220501203612942

image-20220501204039193

image-20220501204157961

k值对K-means聚类影响

image-20220501204434926

image-20220501204544635

image-20220501205311328

image-20220501205412746

K均值算法运行注意注意

image-20220501204631882

image-20220501204800712

image-20220501204845099

image-20220501204917651

K-means的局限

image-20220501205520990

image-20220501205831554

代码演示

image-20220501205114718

image-20220501205640485

image-20220501205655388 image-20220501210728445 image-20220501210750702

层次聚类

image-20220501205956115

凝聚层次聚类

image-20220501210057792

image-20220501210257323

分裂层次聚类

image-20220501210157413

层次聚类运行过程

image-20220501210617952

层次聚类问题

image-20220501211009912

簇间相似度

image-20220501211120687

MIN(单连接)

image-20220501211241313

image-20220501211525185

image-20220501211730793

MAX(全连接)
image-20220501211835185 image-20220501212028190

image-20220501212205387

组平均

image-20220501212312263

image-20220501212341282

质心距离

image-20220501212410882

image-20220501212432114

层次聚类特点

image-20220501212525238

代码实现

image-20220501212554701

image-20220502230526521

image-20220502230608684 image-20220502230621659

密度聚类

image-20220502230804936 image-20220502230837133

DBSCAN

image-20220502231725538 image-20220502231754409 image-20220502231830373 image-20220502231942230

image-20220502231106481

image-20220502231225481
直接密度可达和密度可达

image-20220502232403856

image-20220502232657432
密度相连

image-20220502232809663

image-20220502233103676 image-20220502233507139

DBSCAN算法

image-20220502233715789

DBSCAN优势

image-20220502233937292

DBSCAN劣势
image-20220502234018714

聚类质量

image-20220502234305030 image-20220502234406008 image-20220503104338542 image-20220503104426208

实验六 聚类算法

image-20220503115501342

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import numpy as np
from scipy import misc
from sklearn import cluster
import matplotlib.pyplot as plt

###STEP1###
#compress_image函数实现图片压缩功能,compress_image函数将每个像素作为一个元素进行聚类,以此减少其颜色个数。
#参数img是图片传入的接口,因此我们需要知道变量img的数据结构,请自行查看。
def compress_image(img,num_cluster):
# 思考,聚类算法对输入的数据结构要求如何?
# STEP1.1:将img结构进行转换即每个像素作为一个元素,使之能符合聚类算法数据输入的要求。
X=img.reshape((-1,1))
# 创建KMeans聚类模型,并训练。
kmeans=cluster.KMeans(n_clusters=num_cluster,n_init=4,random_state=5)
kmeans.fit(X)
# STEP1.2:分别获取每个数据聚类后的label,以及每个label的质心。
labels=kmeans.labels_
centroids=kmeans.cluster_centers_.squeeze()
# STEP1.3:使用质心的数值代替原数据的label值,那么我们将获得一个新的图像。
# 提示,使用numpy的choose函数进行进行质心值的代替,reshape函数回复原图片的数据结构,并返回结果。
input_image_compressed=np.choose(labels,centroids).reshape(img.reshape)
return input_image_compressed

### STEP2
#plot_image函数打印图片
def plot_image(img,title):
vmin=img.min()
vmax=img.max()
plt.figure()
plt.title(title)
plt.imshow(img,cmap=plt.cm.gray,vmin=vmin,vmax=vmax)

###STEP3###
#读入图片,设置压缩率,实现压缩
#设置图片的路径和压缩比例
input_file=r"D:\重庆第二师范学院\2020秋大三上\数据挖掘与机器学习 程雪峰\实验六 聚类算法\flower.jpg"
num_bits=2
if not 1<=num_bits<=8:
raise TypeError('Number of bits should be between 1 and 8')
num_clusters = np.power(2,num_bits)
# 输出压缩比例
compression_rate = round(100*(8.0-num_bits)/8.0,2)
print("\nThe size of the image will be reduced by a factor of")
print("\nCompression rate = "+str(compression_rate)+"%")
# 加载需要压缩的图片
input_image=misc.imread(input_file,True).astype(np.uint8)
# 原始图像的输出
plot_image(input_image,'Original image')
# 压缩后的图像输出
input_image_compressed=compress_image(input_image,num_clusters)
plot_image(input_image_compressed,'Compressed image; compression rate = '+str(compression_rate)+'%')
plt.show()

实验七 集成学习

1
决策树(Decision Tree)是在已知各种情况发生概率的基础上,通过构成决策树来求取净现值的期望值大于等于零的概率,评价项目风险,判断其可行性的决策分析方法,是直观运用概率分析的一种图解法。

image-20220503194259180

1
2
题目一:分析影响房价的因素
我们现在需要使用决策树来对房价的因素进行分析发现哪个属性最重要,在前面实验中我们已经熟悉了波士顿房价这个数据集,这个数据集由13个属性,以及一个价格所组成,房子的属性影响价格的走势,但是每一个属性的重要程度是不一样的,回想决策树的原理,我们可以使用决策树帮我们判别出特征属性的重要程度。提示:使用决策树回归器DecisionTreeRegressor的feature_importances_ 方法。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import numpy as np
from sklearn.tree import DecisionTreeRegressor
from sklearn import datasets
from sklearn.metrics import mean_squared_error,explained_variance_score
from sklearn.utils import shuffle
import matplotlib.pyplot as plt

if __name__ == '__main__':
# Load housing data
housing_data=datasets.load_boston()
# Shuffle the data
X,y=shuffle(housing_data.data,housing_data.target,random_state=7)
# Split the data 80/20 (80% for training, 20% for testing)
num_training=int(0.8*len(X))
X_train,y_train=X[:num_training],y[:num_training]
X_test,y_test=X[num_training:],y[num_training:]
# Fit decision tree regression model
dt_regressor=DecisionTreeRegressor(max_depth=4)
dt_regressor.fit(X_train,y_train)
# Evaluate performance of Decision Tree regressor
y_pre_dt=dt_regressor.predict(X_test)
mse=mean_squared_error(y_test,y_pre_dt)
evs=explained_variance_score(y_test,y_pre_dt)
print("\n#### Decision Tree performance ####")
print("Mean squared error =",round(mse, 2))
print("Explained variance score =",round(evs,2))

# Plot relative feature importances
feature_importance = 100.0*(dt_regressor.feature_importances_/max(dt_regressor.feature_importances_))
# Sort the values and flip them
index_sorted=np.flipud(np.argsort(feature_importance))
# Arrange the X ticks
pos=np.arange(index_sorted.shape[0])+0.5
# Plot the bar graph
plt.figure()
plt.bar(pos,feature_importance[index_sorted],align='center')
plt.xticks(pos,housing_data.feature_names[index_sorted])
plt.ylabel('Relative Importance')
plt.title('Decision Tree regressor')
plt.show()
image-20220503195924871
1
2
题目二:随机森林
使用sklearn自带数据集digits进行练习,请将数据集划分为训练与测试集,分别使用决策树和随机森林算法对数据digits的训练集进行分类,比较决策树算法和随机森林算法的表现,并思考是否可以继续提升随机森林算法的表现?该如何实现呢?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from sklearn.tree import DecisionTreeClassifier
from sklearn import datasets
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn import metrics

dig = datasets.load_digits()
X_train,X_test,Y_train,Y_test=train_test_split(dig.data,dig.target,test_size=0.4,random_state=0)

dtc=DecisionTreeClassifier()
rfc=RandomForestClassifier()
rfc2=RandomForestClassifier(n_estimators=200,max_features=8)
dtc_pre=dtc.fit(X_train,Y_train).predict(X_test)
rfc_pre=rfc.fit(X_train,Y_train).predict(X_test)
rfc2_pre=rfc2.fit(X_train,Y_train).predict(X_test)
print(metrics.accuracy_score(Y_test,dtc_pre))
print(metrics.accuracy_score(Y_test,rfc_pre))
print(metrics.accuracy_score(Y_test,rfc2_pre))
image-20220503201744350

数据降维

降维

image-20220503105529797

现实中的数据

image-20220503105543965

image-20220503105606469

降维的必要性

image-20220503105704085

特征维度减少的方法

image-20220503105812789

特征选择

image-20220503110033101

特征选择代码实现

image-20220503110216627

特征提取

image-20220503110324120

image-20220503110355824

常用的降维方法

image-20220503110454902
1
+独立成分分析
PCA算法

image-20220503110559964

image-20220503110708437
PCA算法过程
image-20220503110925058
PCA算法的特点
image-20220503111042035
1
PCA对象非常有用,但对大型数据集有一定限制。最大的限制是PCA仅支持批处理,这意味着所有要处理的数据必须适合主内存。IncrementalPCA对象使用不同的处理形式使PCA允许部分计算。
PCA代码实现
image-20220503111113897 image-20220503163502436 image-20220503111206374
Incremental PCA实现
1
PCA对象非常有用,但对大型数据集有一定限制。最大的限制是PCA仅支持批处理,这意味着所有要处理的数据必须适合主内存。IncrementalPCA对象使用不同的处理形式使PCA允许部分计算。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.decomposition import PCA,IncrementalPCA
iris=load_iris()
x=iris.data
y=iris.target
n_components=2
ipca=IncrementalPCA(n_components=n_components,batch_size=10)
X_ipca=ipca.fit_transform(x)
pca=PCA(n_components=n_components)
X_pca=pca.fit_transform(x)
colors=['navy','turquoise','darkorange']
for X_transformed,title in [(X_ipca,'Incremental PCA'),(X_pca,"PCA")]:
plt.figure(figsize=(8,8))
for color,i,target_name in zip(colors,[0,1,2],iris.target_names):
plt.scatter(X_transformed[y==i,0],X_transformed[y==i,1],color=color,lw=2,label=target_name)
if "Incremental" in title:
err=np.abs(np.abs(X_pca)-np.abs(X_ipca)).mean()
plt.title(title+' of iris dataset\nMean absolute unsigned error% .6f'% err)
else:
plt.title(title+' of iris dataset')
plt.legend(loc='best',shadow=False,scatterpoints=1)
plt.axis([-4,4,-1.5,1.5])
plt.show()
image-20220503172833866
FA(因子分析)算法
image-20220503174033270
LCA(独立成分分析)算法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from sklearn.datasets.samples_generator import make_blobs

X,y=make_blobs(n_samples=10000,n_features=3,centers=[[3,3,3],[0,0,0],[1,1,1],[2,2,2]],cluster_std=[0.2,0.1,0.2,0.2]
,random_state=9)
fig=plt.figure()
ax=Axes3D(fig,rect=[0,0,1,1],elev=30,azim=20)
plt.scatter(X[:,0],X[:,1],X[:,2],marker='.')
from sklearn.decomposition import FastICA
ica=FastICA(n_components=2)
ica.fit(X)
X_new=ica.fit_transform(X)
print(len(X_new[:,0]),len(X_new[:,1]))
ax1=fig.add_subplot(111)
plt.scatter(X_new[:,0],X_new[:,1],marker='.')
plt.show()
image-20220503175412127

本文标题:数据挖掘与机器学习-第六章 无监督学习

文章作者:TTYONG

发布时间:2022年05月01日 - 19:05

最后更新:2022年05月05日 - 10:05

原始链接:http://tianyong.fun/%E6%95%B0%E6%8D%AE%E6%8C%96%E6%8E%98%E6%8A%80%E6%9C%AF%E4%B8%8E%E5%BA%94%E7%94%A8-%E7%AC%AC%E5%85%AD%E7%AB%A0-%E6%97%A0%E7%9B%91%E7%9D%A3%E5%AD%A6%E4%B9%A0.html

许可协议: 转载请保留原文链接及作者。

多少都是爱
0%