一、分类算法-K-近邻算法

通过邻居判断类别

一、定义

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

来源:KNN算法,一种分类算法

二、计算距离公式:欧式距离

在这里插入图片描述

相似的样本,特征之间的值都是相近的。

计算特征距离时,应该进行标准化。

三、算法API

在这里插入图片描述

四、k的取值

k的取值会影响k的结果

五、实例:预测入住位置。

1. 确定目标值和特征值

在这里插入图片描述

2. 数据处理 缩小x、y

3. 代码

from sklearn.neighbors import KNeighborsClassifier
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
def knn():
    #k-近邻预测用户签到位置

    #读取数据
    data=pd.read_csv("./facebookdata/train.csv")
    #print(data.head(10)) #打印data数据前十行

    #处理数据
    #1、缩小数据.查询数据筛选
    data=data.query("x > 1.0 & x < 1.25 & y>2.5 & y<2.75")

    #2、处理时间的数据
    time_value=pd.to_datetime(data["time"],unit="s")
    print(time_value)
    #把日期格式转换成字典
    time_value=pd.DatetimeIndex(time_value)


    #3、 构造一些特征
    data["second"]=time_value.day
    data["hour"]=time_value.hour
    data["weekday"]=time_value.weekday

    # 4、 把时间戳特征删除
    data=data.drop(["time"], axis=1) #pandas里列是1
    data=data.drop(["row_id"],axis=1)
    print(data)

    # 5、将签到数量小于n个的目标位置删除
    place_count=data.groupby("place_id").count()
    tf=place_count.reset_index()
    data=data[data["place_id"].isin(tf.place_id)]

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

    # 7、进行数据的分割训练集测试集
    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.transform(x_test)


    #进行算法流程
    knn=KNeighborsClassifier(n_neighbors=5)

    #fit,predict,score

    knn.fit(x_train,y_train) #传入训练集

    #得出运算结果
    y_predict= knn.predict(x_test)

    print("预测的目标入住位置为:",y_predict)

    # 得出准确率 y_test 和y_predict

    print("预测的准确率:",knn.score(x_test,y_test))


if __name__=="__main__":
    knn()

在这里插入图片描述

4、k-近邻算法总结

  1. k值问题
  • k值去很小时:容易受异常点影响

  • k值去很大时:比例容易受影响

2)性能问题:时间复杂度很高

k-近邻算法优缺点

优点:

  • 简单,易于理解,易于实现

  • 无需参数估计,无需训练

缺点:

  • 懒惰算法,对测试样本分类时的计算量大,内存开销大。

  • 必须指定k值,k值选择不当则分类精度不能保证

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

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐