1 数据集介绍FBlocation介绍.png

数据介绍:将根据用户的位置,准确性和时间戳预测用户正在查看的业务。

  1. train.csvtest.csv
  2. row_id:登记事件的ID
  3. xy:坐标
  4. 准确性:定位准确性
  5. 时间:时间戳
  6. place_id:业务的ID,这是您预测的目标

官网:https://www.kaggle.com/navoshta/grid-knn/data

2 步骤分析

  • 对于数据做一些基本处理(这里所做的一些处理不一定达到很好的效果,我们只是简单尝试,有些特征我们可以根据一些特征选择的方式去做处理)
    • 1 缩小数据集范围 DataFrame.query()
    • 2 选取有用的时间特征
    • 3 将签到位置少于n个用户的删除
  • 分割数据集
  • 标准化处理
  • k-近邻预测

    3 代码过程

  • 1.获取数据集

    1. # 1、获取数据集
    2. facebook = pd.read_csv("./data/FBlocation/train.csv")
  • 2.基本数据处理

    1. # 2.基本数据处理
    2. # 2.1 缩小数据范围
    3. facebook_data = facebook.query("x>2.0 & x<2.5 & y>2.0 & y<2.5")
    4. # 2.2 选择时间特征
    5. time = pd.to_datetime(facebook_data["time"], unit="s")
    6. time = pd.DatetimeIndex(time)
    7. facebook_data["day"] = time.day
    8. facebook_data["hour"] = time.hour
    9. facebook_data["weekday"] = time.weekday
    10. # 2.3 去掉签到较少的地方
    11. place_count = facebook_data.groupby("place_id").count()
    12. place_count = place_count[place_count["row_id"]>3]
    13. facebook_data = facebook_data[facebook_data["place_id"].isin(place_count.index)]
    14. # 2.4 确定特征值和目标值
    15. x = facebook_data[["x", "y", "accuracy", "day", "hour", "weekday"]]
    16. y = facebook_data["place_id"]
    17. # 2.5 分割数据集
    18. x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=22)
  • 特征工程—特征预处理(标准化)

    1. # 3.特征工程--特征预处理(标准化)
    2. # 3.1 实例化一个转换器
    3. transfer = StandardScaler()
    4. # 3.2 调用fit_transform
    5. x_train = transfer.fit_transform(x_train)
    6. x_test = transfer.fit_transform(x_test)
  • 机器学习—knn+cv

    1. # 4.机器学习--knn+cv
    2. # 4.1 实例化一个估计器
    3. estimator = KNeighborsClassifier()
    4. # 4.2 调用gridsearchCV
    5. param_grid = {"n_neighbors": [1, 3, 5, 7, 9]}
    6. estimator = GridSearchCV(estimator, param_grid=param_grid, cv=5)
    7. # 4.3 模型训练
    8. estimator.fit(x_train, y_train)
  • 模型评估 ```python

    5.模型评估

    5.1 基本评估方式

    score = estimator.score(x_test, y_test) print(“最后预测的准确率为:\n”, score)

y_predict = estimator.predict(x_test) print(“最后的预测值为:\n”, y_predict) print(“预测值和真实值的对比情况:\n”, y_predict == y_test)

5.2 使用交叉验证后的评估方式

print(“在交叉验证中验证的最好结果:\n”, estimator.bestscore) print(“最好的参数模型:\n”, estimator.bestestimator) print(“每次交叉验证后的验证集准确率结果和训练集准确率结果:\n”,estimator.cvresults) ```