回归算法--K近邻算法

本文介绍了K近邻算法的数学基础和分类原理,详细展示了如何使用Python的sklearn库进行数据预处理、特征选择、模型训练及预测。通过实例分析了KNN算法在处理Facebook签到数据时的步骤,包括数据筛选、时间序列转换、特征工程和模型评估。同时,讨论了KNN算法的优缺点,指出其适用于小规模数据场景。
摘要由CSDN通过智能技术生成


学习最简单的分类算法-K近邻算法

前言

一、K近邻算法的数学基础?

在这里插入图片描述
你的“邻居”来推断出你的类别
在这里插入图片描述
预测影片是爱情片

二、分类算法-k近邻算法(KNN)

1.定义

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

2.计算公式

计算距离公式

在这里插入图片描述

3. K近邻API

在这里插入图片描述

三、代码实例化演示

1.案例:

在这里插入图片描述

2. 数据的处理在这里插入图片描述

3. 实例流程

1、数据集的处理

2、分割数据集

3、对数据集进行标准化

4、estimator流程进行分类预测

"" 
@author: Administrator 
@file: 03_K近邻算法.py 
@time: 2021/10/20 
@desc:
通过K近邻算法,训练模型,预测客户的place_id
"""
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
def kuns():
    #1.读取训练集数据
    data=pd.read_csv(r"F:\future\5-机器学习\facebook-v-predicting-check-ins\train.csv")
    """
    一、处理数据
    """
    #2.缩小数据范围
    #print(data.head(3))
    data=data.query("x>1 & x <1.25 & y >2.5 & y <2.75")
    # 3.处理日期数据
    time_value=pd.to_datetime(data["time"],unit="s")

    # 4. 将时间序列转化为字典格式的时间序列
    time_v=pd.DatetimeIndex(time_value)
    data.loc[:,"day"]=time_v.day#利用loc 而非data["列名"]=value,因为只会将value的copy添加到df的新列上
    data.loc[:,"hour"]=time_v.hour
    data.loc[:,"weekdays"]=time_v.weekday
    #5. 删除时间戳-time
    data=data.drop("time",axis=1)
    # 6. 将签到位置中少于3个用户的place_id进行删除
    # 6.1 将place_id 进行分组与统计:
    place_count=data.groupby("place_id").count()#place_count是df类型,并且与data中place_id数据一致,其他是次数
    """随便取一个column,将次数阈值设置为3"""
    tf=place_count[place_count["row_id"]>3].reset_index()#重新设置index,则place_id会进入place_count中
    # 7. 筛选data中的place_id值,即如果在tf中就保留在data中,即利用tf中place_id 筛选data 中place_id
    data=data[data["place_id"].isin(tf.place_id)]#df["列名"]=df.列名

    """
    二、特征工程
    """

    # 1. 取出数据集中的特征值和目标值
    y=data["place_id"]
    x=data.drop("place_id",axis=1)

    # 2. 进行分割数据集,形成训练集和测试集
    """
    关键输出的是训练集_特征值;测试集_目标值;测试集_目标值;测试集_目标值
    """
    x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.25)

    # #2 标准化训练集和测试集的特征值
    std=StandardScaler()
    x_train=std.fit_transform(x_train)#训练集的特征值建立标准,平均值,标准差
    x_test=std.transform(x_test)#直接利用训练集的特征值建立的标准
    # """
    # 三、 进行K近邻算法,构建模型,并利用分割的测试集进行验证
    # """
    # # 1、调用API,进行算法流程
    knn=KNeighborsClassifier(n_neighbors=5)
    # # 2. 传入训练集的特征值和目标值
    knn.fit(x_train,y_train)
    # # 3. 得出预测结果,进行计算测试集中特征值和上述输入的训练集的特征值之间的距离,并根据距离大小,利用类别进行判断
    y_predice=knn.predict(x_test)
    scor=knn.score(x_test,y_test)
    print(scor)





if __name__=="__main__":
    kuns()

三、k-近邻算法优缺点

优点:
简单,易于理解,易于实现,无需估计参数,无需训练

缺点:
懒惰算法,对测试样本分类时的计算量大,内存开销大
必须指定K值,K值选择不当则分类精度不能保证

四、总结

使用场景:小数据场景,几千~几万样本,具体场景具体业务
去测试

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值