头歌机器学习KNN算法

第一关:实现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 **********#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值