机器学习-sk-learn-Facebook数据集预测签到位置
sk-learn Facebook數據集預測簽到位置
本次比賽的目的是預測一個人將要簽到的地方。 為了本次比賽,Facebook創建了一個虛擬世界,其中包括10公里*10公里共100平方公里的約10萬個地方。
對于給定的坐標集,我們的任務將根據用戶的位置,準確性和時間戳等預測用戶下一次的簽到位置。 數據被制作成類似于來自移動設備的位置數據。
特征值:“x”, “y”, “accuracy”, “day”, “hour”, “weekday”
目標值: place_id
本實例使用Facebook上統計的數據,根據地點坐標和簽到時間等特征來訓練模型,最終得到目標地點的ID。訓練集與測試集比例為8:2。
在進行數據模型訓練時,首先要進行數據預處理
縮小數據范圍:因為數據集有2000W+條數據,程序跑起來會非常慢,因此適當縮小數據范圍,如果電腦配置夠或者租了服務器請隨意~
選擇時間特征:數據中的時間分離出day,hour,weekend
去掉簽到較少的地方:剔除意義不大的特殊地點,減少過擬合
確定特征值和目標值
分割數據集
交叉驗證:將拿到的訓練數據,分為訓練和驗證集。以下圖為例:將數據分成4份,其中一份作為驗證集。然后經過4次(組)的測試,每次都更換不同的驗證集。即得到4組模型的結果,取平均值作為最終結果。又稱4折交叉驗證。本實例cv=5,則為5折交叉驗證。
def facebook_demo():"""sk-learn Facebook數據集預測簽到位置:return:"""# 1、獲取數據集facebook = pd.read_csv('/Users/maxinze/Downloads/機器學xiday2資料/02-代碼/FBlocation/train.csv')# 2.基本數據處理# 2.1 縮小數據范圍# 選擇(2,2.5)這一范圍的數據,使用 queryfacebook_data = facebook.query("x>5.0 & x<6 & y>5.0 & y<6.0")# 2.2 選擇時間特征# 提取時間time = pd.to_datetime(facebook_data["time"], unit="s")time = pd.DatetimeIndex(time)# 加一列dayfacebook_data["day"] = time.day# 加一列hourfacebook_data["hour"] = time.hour# 加一列weekdayfacebook_data["weekday"] = time.weekday# 2.3 去掉簽到較少的地方# 分組聚類,按數目聚類place_count = facebook_data.groupby("place_id").count()# 選擇簽到大于3的place_count = place_count[place_count["row_id"] > 3]# 傳遞數據facebook_data = facebook_data[facebook_data["place_id"].isin(place_count.index)]# facebook_data.shape()# 2.4 篩選特征值和目標值# 特征值x = facebook_data[["x", "y", "accuracy", "day", "hour", "weekday"]]# 目標值y = facebook_data["place_id"]# 2.5 分割數據集(數據集劃分) 參數特征值, 目標值x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=22)# 3.特征工程--特征預處理(標準化)# 3.1 實例化一個轉換器transfer = StandardScaler()# 3.2 調用fit_transform# 特征訓練集x_train = transfer.fit_transform(x_train)# 特征測試集x_test = transfer.fit_transform(x_test)# 4.機器學習--knn+cv# 4.1 實例化一個估計器estimator = KNeighborsClassifier()# 4.2 調用gridsearchCV# param_grid = {"n_neighbors": [1, 3, 5, 7, 9]}param_grid = {"n_neighbors": [5, 7, 9]}estimator = GridSearchCV(estimator, param_grid=param_grid, cv=3 )# 4.3 模型訓練estimator.fit(x_train, y_train)# 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.best_score_)print("最好的參數模型:\n", estimator.best_estimator_)print("每次交叉驗證后的驗證集準確率結果和訓練集準確率結果:\n", estimator.cv_results_)return None
因為只選用了部分數據跑代碼,所以模型訓練后測試的準確率不太高,如果可以選用全部數據跑。
總結
以上是生活随笔為你收集整理的机器学习-sk-learn-Facebook数据集预测签到位置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【机器学习】K-近邻算法-模型选择与调优
- 下一篇: 【机器学习】特征工程