zoukankan      html  css  js  c++  java
  • 机器学习笔记(五) K-近邻算法

     K-近邻算法

    (一)定义:如果一个样本在特征空间中的k个最相似的样本中的大多数属于某一个类别,则该样本也属于这个类别。

    (二)相似的样本,特征之间的值应该是相近的,使用k-近邻算法需要做标准化处理。否则预测出来的效果很差。

    (三)算法的优缺点:

      优点:比较简单,易于实现,无需估计参数,无需训练。

      缺点:计算量大,内存开销大,必须指定k值,k值若选取不当则分类精度不能保证。

    (四)适用场景:适用于小数据场景,几千~几万个样本。

    实例:

    from sklearn.model_selection import train_test_split
    from sklearn.neighbors import KNeighborsClassifier
    from sklearn.preprocessing import StandardScaler
    import pandas as pd
    def knnCls():
        """
        k-邻近算法
        :return:
        """
        # 读取数据
        data=pd.read_csv('训练集数据文件的路径')
    
        # 处理数据
        # 1.根据查询的条件,选择特定范围的数据样本
        data=data.query("x>1.0 & x<1.25 & y>2.5 & y<2.75")
    
        # 处理时间数据  把时间戳变成有年月日时分秒的格式
        time_value=pd.to_datetime(data['time'],unit='s')
    
        # 把日期格式转化为字典
        time_value=pd.DatetimeIndex(time_value)
    
        # 构造一些特征
        data['day']=time_value.day    # data里面的特征多一个
        data['hour'] = time_value.hour
        data['weekday'] = time_value.weekday
    
        # 把时间戳特征删除
        data = data.drop(['time'],axis=1)   # 删除time这一列
    
        # 取出数据当中的特征值和目标值
        y=data['place_id']
        x=data.drop(['place_id'],axis=1)
    
        # 进行数据的分割,划分训练集和测试集数据
        x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.25)
    
        # 特征工程(标准化)
        std=StandardScaler()
        # 对测试集和训练集的特征值进行标准化
        x_train=std.fit_transform(x_train)
        x_test=std.fit_transform(x_test)
    
        # 进行算法流程
        knn=KNeighborsClassifier(n_neighbors=5)
        # fit ,predict,score
        knn.fit(x_train,y_train)
    
        # 得出预测结果
        y_predict=knn.predict(x_test)
    
        # 得出准确率
        print(knn.score(x_test, y_test))   # 通过第一个参数x_test可以算出预测的目标值
        return None
    
    
    if __name__=='__main__':
        knnCls()
  • 相关阅读:
    SCAU 9504 面试
    SCAU 9503 懒人选座位
    SCAU 8628 相亲
    SCAU 10691 ACM 光环
    SCAU 8626 原子量计数
    SCAU 10674 等差对
    HDU ACM 1048 The Hardest Problem Ever (水题)
    SCAU 9502 ARDF
    SCAU 10686 DeathGod不知道的事情
    SCAU 8629 热身游戏(高精度)
  • 原文地址:https://www.cnblogs.com/doctorXiong/p/10600907.html
Copyright © 2011-2022 走看看