第一关:实现KNN 算法:
编程要求
根据提示,在右侧编辑器的 begin-end 区域补充代码,完成 kNNClassifier 类中的 fit 函数与 predict 函数。
fit 函数用于 kNN 算法的训练过程,其中:
feature :训练集数据,类型为 ndarray;
label :训练集标签,类型为 ndarray。
predict 函数用于实现 kNN 算法的预测过程,函数返回预测的标签,其中:
feature :测试集数据,类型为 ndarray。
(PS:feature中有多条数据)
#encoding=utf8
import numpy as np
class kNNClassifier(object):
def __init__(self, k):
'''
初始化函数
:param k:kNN算法中的k
'''
self.k = k
# 用来存放训练数据,类型为ndarray
self.train_feature = None
# 用来存放训练标签,类型为ndarray
self.train_label = None
def fit(self, feature, label):
'''
kNN算法的训练过程
:param feature: 训练集数据,类型为ndarray
:param label: 训练集标签,类型为ndarray
:return: 无返回
'''
#********* Begin *********#
# 保存训练数据和标签
self.train_feature = feature
self.train_label = label
#********* End *********#
def predict(self, feature):
'''
kNN算法的预测过程
:param feature: 测试集数据,类型为ndarray
:return: 预测结果,类型为ndarray或list
'''
#********* Begin *********#
# 初始化预测结果列表
predictions = []
# 对测试集中的每个样本进行预测
for test_sample in feature:
# 计算测试样本与所有训练样本的欧氏距离
distances = np.sqrt(np.sum((self.train_feature - test_sample) ** 2, axis=1))
# 获取距离最近的k个样本的索引
k_nearest_indices = np.argsort(distances)[:self.k]
# 获取这k个样本对应的标签
k_nearest_labels = self.train_label[k_nearest_indices]
# 统计出现最多的标签
prediction = np.bincount(k_nearest_labels).argmax()
predictions.append(prediction)
return np.array(predictions)
#********* End *********#
第二关:红酒分类
根据提示,在右侧编辑器的 begin-end 间补充代码,完成 classification 函数。函数需要完成的功能是使用 KNeighborsClassifier 对 test_feature 进行分类。其中函数的参数如下:
train_feature : 训练集数据,类型为 ndarray;
train_label : 训练集标签,类型为 ndarray;
test_feature : 测试集数据,类型为 ndarray。
from sklearn.neighbors import KNeighborsClassifier
from sklearn.preprocessing import StandardScaler
def classification(train_feature, train_label, test_feature):
'''
对test_feature进行红酒分类
:param train_feature: 训练集数据,类型为ndarray
:param train_label: 训练集标签,类型为ndarray
:param test_feature: 测试集数据,类型为ndarray
:return: 测试集数据的分类结果
'''
#********* Begin *********#
# 创建标准化对象
scaler = StandardScaler()
# 对训练数据进行标准化
train_feature_scaled = scaler.fit_transform(train_feature)
# 对测试数据进行标准化(使用与训练数据相同的参数)
test_feature_scaled = scaler.transform(test_feature)
# 创建KNN分类器(这里选择k=5,可以根据实际需求调整)
knn = KNeighborsClassifier(n_neighbors=5)
# 训练模型
knn.fit(train_feature_scaled, train_label)
# 预测测试数据
predictions = knn.predict(test_feature_scaled)
return predictions
#********* End **********#