根据提示,在右侧编辑器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))
编程要求
根据提示,在右侧编辑器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)
编程要求
根据提示,在右侧编辑器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))