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()