博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【零基础学习机器学习】k-近邻算法
阅读量:3935 次
发布时间:2019-05-23

本文共 2103 字,大约阅读时间需要 7 分钟。

目录


k-近邻算法

什么是k-近邻算法

属于分类算法,特征是:目标值是离散的。

举例:

电影类型是目标值,推断某个电影的电影类型是什么?可以根据此电影与哪个电影类型距离最近,则是什么类型的电影。

k-近邻算法API

实战

分析

代码演练

from sklearn.model_selection import train_test_splitfrom sklearn.neighbors import KNeighborsClassifierfrom sklearn.preprocessing import StandardScalerimport pandas as pdimport numpy as npdef knncls():    """    K-近邻预测用户签到位置    :return: None    """    # TODO 读取数据    data = pd.read_csv("train.csv")    # print(data.head(10))    # TODO 处理数据    # 1、缩小数据量,为了迅速查询数据    data = data.query("x>1.0 & x<1.25 & y>2.5 & y<2.75")    # print(data.head(10))    # 把日期格式转换成字典格式    time_value = pd.to_datetime(data['time'], unit='s')    # print(time_value)    # print(type(time_value))  # Series    time_value = pd.DatetimeIndex(time_value)    # print(time_value)    # print(type(time_value))  # DatetimeIndex    # 2、构造一些时间特征    data['day'] = time_value.day   # 这种形式的增加列,是把time_value的day复制一份,而loc方法是直接拿来用。    data['hour'] = time_value.hour    data['weekday'] = time_value.weekday    # 3、把时间戳特征删除    data = data.drop(['time'], axis=1)   # Pandas中axis=1表示列    # print(data)    # 4、将签到位置少于n个用户的删除    place_count = data.groupby('place_id').count()    # 分组之后,索引为分组字段,并且列没有分组字段    tf = place_count[place_count.row_id > 3].reset_index()  # 重设索引,并且列增加索引字段    data = data[data['place_id'].isin(tf.place_id)]    # 把row_id列删除,此列无意义    data = data.drop(['row_id'], axis=1)    print(data)    # 5、取出数据当中的特征值和目标值    y = data['place_id']    x = data.drop(['place_id'], axis=1)    # 6、进行数据的分割,训练集和测试集    x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.25)  # 训练目标值,测试目标值,训练特征值,测试特征值    # TODO 特征工程(标准化)    std = StandardScaler()    # 对测试集和训练集的特征值进行标准化    x_train = std.fit_transform(x_train)    x_test = std.transform(x_test)    # TODO 进行算法流程    knn = KNeighborsClassifier(n_neighbors=5)    # fit  predict,score    knn.fit(x_train, y_train)    # TODO 得出预测结果    y_predict = knn.predict(x_test)    print("y预测的目标签到位置为:", y_predict)    # TODO 得出准确率    print("预测的准确率:", knn.score(x_test, y_test))    return Noneif __name__ == '__main__':    knncls()

k-近邻算法优缺点

k值取很小,容易受异常点影响

k值取很大,容易受目标值的数量(类别)波动

性能:很慢

转载地址:http://ydrgn.baihongyu.com/

你可能感兴趣的文章
redis的消息订阅/发布总结
查看>>
分布式开放消息系统(RocketMQ)介绍
查看>>
(转) RocketMQ与Kafka对比(18项差异)
查看>>
在Windows下搭建RocketMQ
查看>>
Kryo:快速、高效的序列化框架
查看>>
spring抛出BeanCreationException之@Autowired,@Qualifier
查看>>
Intellij IDEA 快捷键整理
查看>>
idea的基本Debug调试
查看>>
TCP: time wait bucket table overflow解决方法
查看>>
springmvc常用注解标签详解
查看>>
ffmpeg基本用法(转)介绍
查看>>
Java通过调用FFMPEG获取视频时长(已测试)
查看>>
java.lang.ProcessBuilder类(系统进程)
查看>>
多线程Runtime.getRuntime().exec常见问题
查看>>
process.waitFor() 返回值含义
查看>>
调用Process.waitfor导致的进程挂起(较详细)
查看>>
springmvc支持json和jsonp类型数据
查看>>
获取 request 中用POST方式"Content-type"是"application/json"发送的 json 数据
查看>>
Nginx反向代理,负载均衡,redis session共享,keepalived高可用
查看>>
web项目部署补丁包
查看>>