头歌实验教学平台python与机器学习-聚类

第1关:聚类任务简述

根据提示,在右侧编辑器Begin-End部分补充代码。

任务描述:使用Python语言,对聚类结果进行性能评估。

任务1:根据公式计算 Jaccard 系数;
任务2:根据公式计算 FM 指数;
任务3:根据公式计算 Rand 指数。

# 导入 numpy 科学计算库
import numpy as np

# 令 m=100
m = 100

# lambda_true 表示参考模型给出的簇标记
np.random.seed(0)
lambda_true = np.random.randint(0,5,m)

# lambda_pred 表示通过聚类得到的簇标记
np.random.seed(1)
lambda_pred = np.random.randint(0,5,m)

# 计算 a,b,c,d
a = b = c = d = 0
for j in range(m):
    for i in range(j):
        if lambda_true[i]==lambda_true[j] and lambda_pred[i]==lambda_pred[j]:
            a = a + 1
        elif lambda_true[i]==lambda_true[j] and lambda_pred[i]!=lambda_pred[j]:
            b = b + 1
        elif lambda_true[i]!=lambda_true[j] and lambda_pred[i]==lambda_pred[j]:
            c = c + 1
        else:
            d = d + 1
        

# 任务1:根据公式计算 Jaccard 系数
########## Begin ##########
JC = a / (a + b + c)
##########  End  ##########

# 任务2:根据公式计算 FM 指数
########## Begin ##########
FM = np.sqrt(a ** 2 / ((a + b) * (a + c)))
##########  End  ##########

# 任务3:根据公式计算 Rand 指数
########## Begin ##########
RI = 2 * (a + b) / (m * (m - 1))
##########  End  ##########

# 打印结果
print("Jaccard 系数为{},FM 指数为{},Rand 指数为{}。".format(JC, FM, RI))

第2关:聚类任务主要算法之 K-Means 聚类

编程要求
根据提示,在右侧编辑器Begin-End部分补充代码。

任务描述:使用Python语言,对给定数据进行聚类,数据可视化如下:

任务1:创建 KMeans 对象,令 n_clusters=2;提示:可以使用 sklearn.cluster 中的 KMeans 模型。
任务2:调用 fit 函数执行训练过程
任务3:调用 predict 函数进行预测,预测的数据为 [0,0], [8,2], [10,3]。


from sklearn.cluster import KMeans

import numpy as np



# 加载数据集

X = np.array([[1, 2], [2, 2.2], [3, 1.5], [2, 1.8], [1, 1.4], [1, 2.5], [1, 1], [10, 2], [10, 2.5], [9, 2.3], [10, 2.4], [9.5, 2.1]])



# 任务1:创建 KMeans 对象,令 n_clusters=2

kmeans = KMeans(n_clusters=2)



# 任务2:调用 fit 函数执行训练过程

kmeans.fit(X)



# 任务3:调用 predict 函数进行预测,预测的数据为 [0,0], [8,2], [10,3]

y_pred = kmeans.predict([[0, 0], [8, 2], [10, 3]])



# 打印结果

print(y_pred)

第3关:聚类任务应用案例

编程要求
根据提示,在右侧编辑器Begin-End部分补充代码。

任务描述:使用Python语言编程,使用 K-Means 聚类算法对 Iris 鸢尾花数据集进行分类,并使用外部指数对聚类结果进行分析。

任务1:创建 KMeans 对象,令 n_clusters=4;
任务2:调用 fit 函数执行训练过程;
任务3:调用 predict 函数进行预测。

from sklearn.datasets import load_iris
from sklearn.cluster import KMeans
from sklearn.model_selection import train_test_split
import numpy as np

# 加载鸢尾花数据集
iris = load_iris()
x = iris['data']
y = iris['target']

# 将数据集分为训练集和测试集
np.random.seed(0)
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.1)

# 任务1:创建 KMeans 对象,令 n_clusters=4
kmeans = KMeans(n_clusters=4)

# 任务2:调用 fit 函数执行训练过程
kmeans.fit(x_train)

# 任务3:调用 predict 函数进行预测
y_pred = kmeans.predict(x_test)

# 打印结果
print("真实结果:\n", y_test)
print("预测结果:\n", y_pred)

# 计算 a,b,c,d
a = b = c = d = 0
m = 15
for j in range(m):
    for i in range(j):
        if y_test[i]==y_test[j] and y_pred[i]==y_pred[j]:
            a = a + 1
        elif y_test[i]==y_test[j] and y_pred[i]!=y_pred[j]:
            b = b + 1
        elif y_test[i]!=y_test[j] and y_pred[i]==y_pred[j]:
            c = c + 1
        else:
            d = d + 1

# 根据公式计算 Jaccard 系数
JC = a / (a + b + c)

# 根据公式计算 FM 指数
FM = np.sqrt(a ** 2 / ((a + b) * (a + c)))

# 根据公式计算 Rand 指数
RI = 2 * (a + b) / (m * (m - 1))

# 打印结果
print("Jaccard 系数为{},FM 指数为{},Rand 指数为{}。".format(JC, FM, RI))


你可能感兴趣的:(机器学习,python,聚类)