KNN算法调优
admin
2023-06-25 17:22:34
0

  1.所用方法:

  交叉验证与网格搜索

  交叉验证(为了让被评估的模型更加精确可信):

  所有训练集数据分成N等分,几等分就是几折交叉验证

  网格搜索:调参数 K-近邻:超参数K

  2.API:

  sklearn.model_selection.GridSearchCV: CV即cross validation

  GridSearchCV(estimator,param_grid=None,cv=None)

  .对估计器的参数指定值进行详尽搜索

  .estimator 估计器对象

  .param_grid: 参数估计器(dict){"n_neighbors":[1,3,5]}

  .cv :指定几折交叉验证

  .fit:输入训练数据

  .结果分析;

  .best_score:在交叉验证中验证的最好结果

  .best_estimaor:最好的参数模型

  .cv_results_:每次交叉验证后的验证集正确率结果和训练集正确率结果

  3.对之前的预测签入案例调优:

  # -*- coding: utf-8 -*-

  '''

  @Author :Jason

  '''

  from sklearn.model_selection import GridSearchCV

  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-近邻预测用去签入位置

  :return:

  '''

  #1.读取数据

  data = pd.read_csv(r"./files/FBlocation/train.csv")

  print(data.head())

  #2.处理数据

  #2.1.缩小数据,查询数据筛选:query 理解为 sql 中的查询

  data.query("x > 1.0 & y < 1.25 & y > 2.5 & y < 2.75")

  #2.2.处理时间

  time_value = pd.to_datetime(data["time"],unit="s") #秒

  print(time_value)

  #2.3.把时间格式转换成 字典格式

  time_value = pd.DataFrame(time_value) #年月日时分秒等变为{"year":2019,"month":01} 这样的

  #2.4.构造一些特征,年月都一样

  data["day"] = time_value.day

  data["hour"] = time_value.hour

  data["weekday"] = time_value.weekday

  #2.5.删除一些特征郑州妇科医院 http://m.zyfuke.com/

  data = data.drop(["time"],axis=1) #pandas中axis=1代表列,sklearn中axis=0代表列

  #2.6.将签到位置少于 n 个用户的数据删除

  place_count = data.groupby("place_id").count() #根据place_id分组,统计次数

  tf = place_count[place_count.row_id > 3].reset_index() #次数大于3的索引重置0,1,2排序,将原来索引放置place_id列

  data = data[data["place_id"].isin(tf.place_id)] #如果place_id > 3的数据保存,小于则去掉

  #2.7.去除数据当中的特征值 和 目标值

  y = data["place_id"]

  x = data.drop(["place_id"],axis=0.25)

  #2.8.进行数据的分割训练集合测试集

  x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.25)

  #3.特征工程(标准化) #这里标准化,和前期对比

  std = StandardScaler()

  #测试、训练集特征值 标准化

  x_train_std = std.fit_transform(x_train)

  # y_train_std = std.fit_transform(y_train)#已经fit转换过了,可以直接transform()

  y_train_std = std.transform(y_train)

  #4.进行算法 #超参数

  knn = KNeighborsClassifier(n_neighbors=5)

  #构造一些参数的值进行搜索

  param = {"n_neighbors":[3,5,10]}

  #进行网格搜索

  gc = GridSearchCV(knn,param_grid=param,cv=2)

  gc.fit(x_train,y_train)

  #预测正确率

  print("在测试集上正确率:",gc.score(x_test,y_test))

  print("在交叉集上最好的结果:",gc.best_score_)

  print("选择最好的模型是:",gc.best_estimator_)

  print("每个超参数每次交叉验证的结果:",gc.cv_results_)

  return None

  if __name__ == "__main__":

  knn()

  结果:

  

KNN算法调优


  从结果看出,最后的模型中,参数K取的值为10


相关内容

热门资讯

电视为什么一直闪屏 由于电源电压不稳定或电源供电不足的缘故、电视分辨率的故障、电视存在周围有电磁干扰的缘故、电视的刷新频...
专访塞尔维亚总统武契奇 塞尔维亚总统武契奇首次对中国进行国事访问,接受《高端访谈》专访。他说,这是他政治生涯中最重要的一次访...
大理宾川:六一儿童节前夕,警方... “大风在刮,大雪在下。烽火中拼杀,危难的关头热血护中华。不怕流血,不怕牺牲。只为守护家,先烈用生命换...
杀入固态电池赛道,5150 亿... 农夫山泉创始人、前中国首富钟睒睒,又有新动作! 近日,钟睒睒通过旗下养生堂战略投资固态电池材料企业智...
南京测试机器人楼宇外立面清洗,... 扬子晚报网5月29日讯(记者 张可)南京存量楼宇数量庞大、外立面日常养护、翻新清洁需求旺盛。长期以来...
特朗普推迟就伊朗相关协议作最终... 新华社华盛顿5月29日电(记者黄强 徐剑梅)据美国《纽约时报》29日援引一名不愿透露姓名的政府高级官...
字节跳动AI4S团队调整,由杨... 有传言称,字节Seed旗下AI4S团队,正在讨论新一轮组织调整,包括从字节分拆的可能性。 5月29日...
算启新程 智领未来 中国移动亮... 蓬勃盛夏,智潮奔涌。5月28日,2026世界智能产业博览会(以下简称“智博会”)在天津盛大开幕。作为...
原创 v... PChome 5月29日评测,作为一个手机相册里存着几千张Live图的人,vivo S系列一直是我的...
神舟二十一号航天员乘组平安抵京 据中国载人航天工程办公室消息,圆满完成神舟二十一号载人飞行任务的航天员乘组,于北京时间2026年5月...