facebook_sample.py 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. #!/usr/bin/env python
  2. # coding: utf-8
  3. # In[78]:
  4. import pandas as pd
  5. # In[79]:
  6. # 1 获取数据
  7. data = pd.read_csv("./FBlocation/train.csv")
  8. # In[80]:
  9. data.head()
  10. # In[81]:
  11. # 2 基本数据处理
  12. # 1) 缩小数据处理
  13. data = data.query("x > 1.5 & x < 2.5 & y > 1.0 & y < 1.5")
  14. # In[82]:
  15. data.head()
  16. # In[83]:
  17. # 2) 处理时间特征
  18. time_value = pd.to_datetime(data["time"], unit="s")
  19. # In[84]:
  20. date = pd.DatetimeIndex(time_value)
  21. # In[85]:
  22. data["day"] = date.day
  23. data["weekday"] = date.weekday
  24. data["hour"] = date.hour
  25. # In[86]:
  26. data.head()
  27. # In[87]:
  28. # 3) 过滤签到次数少的地点
  29. place_count = data.groupby("place_id").count()["row_id"]
  30. # In[88]:
  31. place_count[place_count > 3].head()
  32. # In[89]:
  33. data_final = data[data["place_id"].isin(place_count[place_count > 3].index.values)]
  34. # In[90]:
  35. # 4) 筛选特征值和目标值
  36. x = data_final[["x", "y", "accuracy", "day", "weekday", "hour"]]
  37. y = data_final["place_id"]
  38. # In[91]:
  39. x.head()
  40. # In[92]:
  41. y.head()
  42. # In[93]:
  43. # 5) 数据集划分
  44. from sklearn.model_selection import train_test_split
  45. # In[94]:
  46. x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=22)
  47. # 数据处理完毕
  48. # In[95]:
  49. from sklearn.preprocessing import StandardScaler
  50. from sklearn.neighbors import KNeighborsClassifier
  51. from sklearn.model_selection import GridSearchCV
  52. # In[96]:
  53. # 3. 特征工程 标准化
  54. transfer = StandardScaler()
  55. x_train = transfer.fit_transform(x_train) # fit_transform训练集
  56. x_test = transfer.transform(x_test) # transform测试集
  57. # 4. KNN 算法预估
  58. estimator = KNeighborsClassifier()
  59. # 加入网格搜索与交叉验证
  60. # 参数准备
  61. param_grid = {"n_neighbors": [3, 5, 7, 9]}
  62. estimator = GridSearchCV(estimator, param_grid=param_grid, cv=3)
  63. estimator.fit(x_train, y_train)
  64. # 5. 模型评估
  65. # 方法一: 直接比对真实值和预测值
  66. y_predict = estimator.predict(x_test)
  67. print("y_predict:\n", y_predict)
  68. print("直接比对真实值和预测值:\n", y_test == y_predict)
  69. # 方法二: 计算准确率
  70. score = estimator.score(x_test, y_test)
  71. print("准确率: \n", score)
  72. # 6. 获取最佳参数
  73. print("最佳参数: \n", estimator.best_params_)
  74. print("最佳结果: \n", estimator.best_score_)
  75. print("最佳估计器: \n", estimator.best_estimator_)
  76. print("交叉验证结果: \n", estimator.cv_results_)