学习笔记:
【机器学习】第一章——机器学习分类和性能度量
【机器学习】第二章——EM(期望最大化)算法
【机器学习】第六章——概率无向图模型
实战系列:
【机器学习】实战系列一——波士顿房价预测(一文学会)
【机器学习】实战系列二——梯度下降(一文学会)
【机器学习】实战系列三——支持向量机(一文学会)
【机器学习】实战系列四——聚类实验(一文学会)
【机器学习】实战系列五——天文数据挖掘实验(天池比赛)
【注】本文实验环境为Jupyter Notebook
完整代码已开源至github
https://github.com/TommyGong08/BIT-CS-Code/tree/master/Machine_Learning
如果对你有帮助的话,欢迎star和follow~
本实验采用三种聚类方法,对iris数据集进行聚类,其目的是提升学生应用聚类方法解决实际问题的能力。
(1)聚类的原理
(2)聚类方法的应用
(3)聚类方法评价指标
代码如下:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.datasets import load_iris
from sklearn.cluster import KMeans
from sklearn.preprocessing import MinMaxScaler
代码如下:
%matplotlib inline
sns.set(style="white")
pd.set_option("display.max_rows", 1000)
iris = datasets.load_iris()
X = iris.data
Y = iris.target
代码如下:
Y = Y.reshape(-1,1)
print(Y.shape)
data = pd.DataFrame(np.concatenate((X, Y), axis=1),\
columns=["x1", "x2", "x3", "x4", "y"])
data["y"] = data["y"].astype("int64")
data.head()
如图所示,数据能够直观地表现出来
通过四个变量两两之间的散点图,我们能够较为直观地自变量之间的关系对因变量的影响。
num = X.shape[0] # 样本总数
ratio = 7/3 # 划分比例,训练集数目:测试集数目
num_test = int(num/(1+ratio)) # 测试集样本数目
num_train = num - num_test # 训练集样本数目
index = np.arange(num) # 产生样本标号
np.random.shuffle(index) # 洗牌
x_test = X[index[:num_test],:] # 取出洗牌后前 num_test 作为测试集
y_test = Y[index[:num_test]]
x_train = X[index[num_test:],:] # 剩余作为训练集
y_train = Y[index[num_test:]]
kmeans = KMeans(n_clusters=3)
kmeans.fit(x_train)
y_test_pre_kmeans = kmeans.predict(x_test)
print("y_test_pre:")
print(y_test_pre_kmeans)
print("y_test:")
print(y_test)
# 计算分类准确率
acc = calc_acc(y_test_pre_kmeans, y_test)
acc = sum(y_test_pre_kmeans==y_test)/y_test.shape[0]
print('the accuracy is', acc) # 显示预测准确率
# 采用EM聚类
from sklearn import mixture
clf=mixture.GaussianMixture(n_components=3, covariance_type='full')
clf.fit(x_train)
y_test_pre_EM = clf.predict(x_test)
print("y_test_pre:")
print(y_test_pre_EM)
print("y_test:")
print(y_test)
# 计算分类准确率
acc = calc_acc(y_test_pre_EM, y_test)
acc = sum(y_test_pre_EM==y_test)/y_test.shape[0]
print('the accuracy is', acc) # 显示预测准确率
选择支持向量机的kernel为‘linear’,分别令C=1,10,100对iris数据集进行预测。代码如下:
# 谱聚类
from sklearn.cluster import SpectralClustering
clustering = SpectralClustering(n_clusters=3,assign_labels="discretize",random_state=0).fit(x_train)
y_test_pre_sp = clustering.fit_predict(x_test)
print("y_test_pre:")
print(y_test_pre_sp)
print("y_test:")
print(y_test)
选择支持向量机的kernel为‘rbf’,分别令C=1,10,100对iris数据集进行预测。代码如下:
acc = calc_acc(y_test_pre_sp, y_test)
acc = sum(y_test_pre_sp==y_test)/y_test.shape[0]
print('the accuracy is', acc) # 显示预测准确率
准确率由于数据集被打乱了,每次实验的结果都不一样,这里就不展示了。
https://scikit-learn.org/stable/modules/clustering.html#clustering
你的点赞将是对我最大的支持,如果本次这篇博客对你有所帮助,欢迎点赞收藏~