机器学习笔记(五) 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()
原文地址:https://www.cnblogs.com/doctorXiong/p/10600907.html