实验2
1.第一个实验
主程序:
from sklearn import neighbors
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report
import random
# 导入数据
iris = datasets.load_iris()
# 打乱数据
data_size = iris.data.shape[0]
index = [i for i in range(data_size)]
random.shuffle(index)
iris.data = iris.data[index]
iris.target = iris.target[index]
# 切分数据集
test_size = 40
x_train = iris.data[test_size:]
x_test = iris.data[:test_size]
y_train = iris.target[test_size:]
y_test = iris.target[:test_size]
ks=[1,4,16,32,64]
for k in ks:
# 模型运算
model = neighbors.KNeighborsClassifier(n_neighbors=k)
model.fit(x_train, y_train)
prediction = model.predict(x_test)
# 输出分类报告
print(f"K值:{k}")
print(classification_report(y_test, prediction))
print("-----------------------------")
2.第二个实验
- 执行的主程序代码
# 载入模块
from sklearn.cluster import KMeans
import numpy as np
import matplotlib.pyplot as plt
# 导入数据
data = np.genfromtxt("kmeans.dat", delimiter=" ")
# 定义一个 ks 列表
ks = [1, 3, 4]
# 创建子图
fig, axes = plt.subplots(1, len(ks), figsize=(15, 5))
for idx, k in enumerate(ks):
# 训练模型
model = KMeans(n_clusters=k)
model.fit(data)
# 查看结果
centers = model.cluster_centers_
print(f"K={k} centers:\n", centers)
result = model.predict(data)
# 获取标签
labels = model.labels_
# 画图
mark = ['or', 'ob', 'og', 'oy']
for i, d in enumerate(data):
axes[idx].plot(d[0], d[1], mark[result[i] % len(mark)]) # 确保索引不超出
mark = ['*r', '*b', '*g', '*y']
for i, center in enumerate(centers):
axes[idx].plot(center[0], center[1], mark[i], markersize=20)
# 添加标题
axes[idx].set_title(f"K-Means Clustering (K={k})")
axes[idx].set_xlabel("Feature 1")
axes[idx].set_ylabel("Feature 2")
axes[idx].grid(True)
# 调整布局
plt.tight_layout()
plt.show()
-
生成一个随机数据集
import numpy as np # 生成一些随机数据 data = np.random.rand(40, 2) # 生成40个二维数据点 # 保存数据到 kmeans.dat 文件 np.savetxt('kmeans.dat', data, delimiter=' ')
浙公网安备 33010602011771号