机器学习 --- kNN算法

文章介绍了kNN算法的基本实现,包括初始化、训练和预测过程,并通过Scikit-learn库的KNeighborsClassifier进行红酒分类示例,展示了如何预处理数据并进行模型训练。

第1关:实现kNN算法

#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 = np.array(feature)
        self.train_label = np.array(label)
        #********* End *********#


    def predict(self, feature):
        '''
        kNN算法的预测过程
        :param feature: 测试集数据,类型为ndarray
        :return: 预测结果,类型为ndarray或list
        '''

        #********* Begin *********#
        def _predict(test_data):
            distances = [np.sqrt(np.sum((test_data - vec) ** 2)) for vec in self.train_feature]
            nearest = np.argsort(distances)
            topK = [self.train_label[i] for i in nearest[:self.k]]
            votes = {}
            result = None
            max_count = 0
            for label in topK:
                if label in votes.keys():
                    votes[label] += 1
                    if votes[label] > max_count:
                        max_count = votes[label]
                        result = label
                else:
                    votes[label] = 1
                    if votes[label] > max_count:
                        max_count = votes[label]
                        result = label
            return result
        predict_result = [_predict(test_data) for test_data in feature]
        return predict_result

        #********* End *********#

第2关:红酒分类

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 = scaler.fit_transform(train_feature)
    test_feature = scaler.transform(test_feature)

    clf = KNeighborsClassifier()
    clf.fit(train_feature, train_label)
    return clf.predict(test_feature)

    #********* End **********#

实验第1关实现kNN算法的代码通过`classification`函数完成对红酒数据的分类,以下是具体实现方法: ```python 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: 测试集数据的分类结果 ''' # 创建标准化对象 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 ``` 在这个实现中,首先使用`StandardScaler`对训练数据和测试数据进行标准化处理,以确保特征具有相同的尺度。然后,创建一个`KNeighborsClassifier`对象,其中`n_neighbors`参数设置为5,表示选择5个最近邻进行分类。接着,使用标准化后的训练数据和对应的标签对KNN模型进行训练。最后,使用训练好的模型对标准化后的测试数据进行预测,并返回预测结果 [^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值