lession 5 KNN分类算法 - fackbook预测签到地点的案例
import pandas as pd from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.neighbors import KNeighborsClassifier from sklearn.model_selection import GridSearchCV def facebook_demo_0(): # 获取数据 data = pd.read_csv("D:/BaiduNetdiskDownload/Python3天快速入门机器学习项目资料/机器学习day2资料/02-代码/FBlocation/train.csv") # 由于数据太大,先把数据范围缩小一下 data = data.query("x < 2.5 & x > 2 & y < 1.5 & y > 1.0") data.to_csv("D:/BaiduNetdiskDownload/Python3天快速入门机器学习项目资料/机器学习day2资料/02-代码/FBlocation/train2.csv") print(data.shape) return None def facebook_demo(): # 获取数据 data = pd.read_csv("D:/BaiduNetdiskDownload/Python3天快速入门机器学习项目资料/机器学习day2资料/02-代码/FBlocation/train2.csv") # 把time这个时间戳特征转换为年月日时分秒 time_value = pd.to_datetime(data["time"], unit="s") print(time_value) # 把time_value转为DateTimeIndex date = pd.DatetimeIndex(time_value) # 这样,date.weekday就可以直接输出星期几了 也可以输出年 月 日 等信息 print(date.weekday) print(date.year) data["day"] = date.day data["weekday"] = date.weekday data["hour"] = date.hour print(data.head()) # groupby一下place_id,看看每个地点签到次数,找出签到次数比较少的 place_count = data.groupby("place_id").count() print(place_count) # 取出大于3次的数据,因为每个字段的值都是表示统计次数,所以不一定是row_id,用其他字段过滤也一样 place_count = place_count.query("row_id > 3") print(place_count) # place_count.index就是place_id print(place_count.index) # 拿到place_id在place_count里的索引布尔值 data_index = data["place_id"].isin(place_count.index) # 通过索引布尔值,过滤data data = data[data_index] print(data.head()) # 筛选目标值y 和 特征值x x = data[["x","y","accuracy","day","weekday","hour"]] y = data["place_id"] print(x.head()) print(y.head()) # 数据集划分 x_train, x_test, y_train, y_test = train_test_split(x, y) # 数据标准化 transfer = StandardScaler() x_train = transfer.fit_transform(x_train) x_test = transfer.transform(x_test) # knn算法训练 estimator = KNeighborsClassifier(n_neighbors=7) estimator.fit(x_train, y_train) # 计算一个预测值 y_predict = estimator.predict(x_test) print("y_predict:", y_predict) print("对比预测值和测试值", y_predict == y_test) # 用测试集计算评估的准确率 scroe = estimator.score(x_test, y_test) print("准确率为:", scroe) # 因为数据量太少,所以准确率不高 return None facebook_demo()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)