# Hadoop_电影网站用户性别预测案例 **Repository Path**: ji-ruihao/HadoopExample_Movie ## Basic Information - **Project Name**: Hadoop_电影网站用户性别预测案例 - **Description**: 实现Hadoop课程案例中的用户性别预测 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 4 - **Forks**: 0 - **Created**: 2021-01-04 - **Last Updated**: 2024-06-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Hadoop_电影网站用户性别预测案例 ## 介绍 借鉴了课本及https://blog.csdn.net/qq_35006802/article/details/100636547?utm_medium=distribute.pc_relevant_download.none-task-blog-blogcommendfrombaidu-3.nonecase&depth_1-utm_source=distribute.pc_relevant_download.none-task-blog-blogcommendfrombaidu-3.nonecas 使用KNN算法实现Hadoop课程案例中的用户性别预测,最高可测得准确率为89.25% ## 配置 虚拟机环境:Centos8 Hadoop版本:3.1.4 JDK版本为1.8 在配置中使用了个性化的设置,将原本的master进行了更名,且将8020的端口号改成了9000 ![输入图片说明](https://images.gitee.com/uploads/images/2021/0105/105850_87916aaf_8124808.png "屏幕截图.png") 在你自己的本机上使用的话,记得将 ![输入图片说明](https://images.gitee.com/uploads/images/2021/0105/110116_d83a663e_8124808.png "屏幕截图.png") 与 ![输入图片说明](https://images.gitee.com/uploads/images/2021/0105/110132_20391b90_8124808.png "屏幕截图.png") 设置成自己环境的配置 ## 步骤 ### 一.获取数据 项目所需的ratings.dat,users.dat,movies.dat已在Data文件夹下,自行上传至HDFS中 * rating.dat数据格式 ![输入图片说明](https://images.gitee.com/uploads/images/2021/0105/111009_e2a37567_8124808.png "屏幕截图.png") * users.dat数据格式 ![输入图片说明](https://images.gitee.com/uploads/images/2021/0105/111141_48c0ec96_8124808.png "屏幕截图.png") * movies.dat数据格式 ![输入图片说明](https://images.gitee.com/uploads/images/2021/0105/111237_3e949120_8124808.png "屏幕截图.png") ### 二.数据变换 连接三个表的数据组成一个特征向量矩阵,并且对性别进行转换,M->0; F->1 #### 2.1 首先运行src/demo/RatingsAndUsers,作为Java程序启动(请确保Hadoop集群已开启并配置好自己的设置) * 运行部分界面 ![输入图片说明](https://images.gitee.com/uploads/images/2021/0105/113001_fef73f33_8124808.png "屏幕截图.png") * 生成的ratings_users文件夹内的内容 ![输入图片说明](https://images.gitee.com/uploads/images/2021/0105/113158_5f46ceee_8124808.png "屏幕截图.png") #### 2.2 依次运行src/demo01/UsersAndMovies * 生成的users_movies文件夹内的内容 ![输入图片说明](https://images.gitee.com/uploads/images/2021/0105/113505_1ab4db4d_8124808.png "屏幕截图.png") #### 2.3 接着运行src/demo03/MoviesGenres * 生成最终的特征向量矩阵数据gender_genre ![输入图片说明](https://images.gitee.com/uploads/images/2021/0105/114109_504c932f_8124808.png "屏幕截图.png") * 注:看过的电影类型顺序不对是因为课本使用的HashMap在Reducer阶段会乱序,故换成了LinkedHashMap,保持设置的一致性 ### 三.数据清洗(移除缺失值和异常值) #### 3.1 运行src/demo03/DataProcessing进行数据清洗 * 结果图 ![输入图片说明](https://images.gitee.com/uploads/images/2021/0105/114622_af4b3005_8124808.png "屏幕截图.png") ### 四.数据集划分(训练数据,测试数据,验证数据 8:1:1) 课本在此步骤中并未做太多的设置,可由于数据本身男女比重差距过大 * 总计1000298条电影评分,男性约占75.36%,女性约占24.63% ![输入图片说明](https://images.gitee.com/uploads/images/2021/0105/114900_3ea1d6a1_8124808.png "屏幕截图.png") * 总计6041人中,男性4332人,约占总人数的71.7%, 女性1709人,约占总人数28.29% ![输入图片说明](https://images.gitee.com/uploads/images/2021/0105/114947_802a2406_8124808.png "屏幕截图.png") * 故在此进行了一些设置,将女性数据尽量集中于训练数据中 ![输入图片说明](https://images.gitee.com/uploads/images/2021/0105/122710_e61d8a21_8124808.png "屏幕截图.png") #### 4.1 运行src/demo3_5/SplitData_2 * 结果(数据同样存储于Data文件夹中,可直接取用) ![输入图片说明](https://images.gitee.com/uploads/images/2021/0105/122731_df0d57ad_8124808.png "屏幕截图.png") ### 五.用户分类实现 * 运行src/demo04/MovieClassify #### 5.1 Mapper阶段中使用夹角余弦来测距离,改进原先课本的欧式距离方法 * 读取测试数据和每条训练数据,遍历测试数据,计算训练数据和每条测试数据之间的距离。 ![输入图片说明](https://images.gitee.com/uploads/images/2021/0105/123104_373b8147_8124808.png "屏幕截图.png") #### 5.2 Reducer阶段中计算权重,合计权重和的方式来决定归属,改进原先课本的众数 * 初始化参数K值,reduce函数对相同键值进行升序排序,取出前K个值,输出reduce函数读取进来的键和K个值中权重和最高的类别。 ![输入图片说明](https://images.gitee.com/uploads/images/2021/0105/123917_7d22c132_8124808.png "屏幕截图.png") #### 5.3 运行结果 ![输入图片说明](https://images.gitee.com/uploads/images/2021/0105/123940_7c67c1e4_8124808.png "屏幕截图.png") ### 六.评价准确性 * 运行src/demo05/Validate * 在Reducer阶段中进行计算 ![输入图片说明](https://images.gitee.com/uploads/images/2021/0105/124049_aedb5dc6_8124808.png "屏幕截图.png") * 结果 ![输入图片说明](https://images.gitee.com/uploads/images/2021/0105/124119_166e87c8_8124808.png "屏幕截图.png") ### 七.多次更改K值实验 ![输入图片说明](https://images.gitee.com/uploads/images/2021/0105/124157_ebbf7915_8124808.png "屏幕截图.png") * 多次实验后证明当K=21时,1656女测试+53女测试+0女验证的这组数据,预测用户性别准确率最高,为89.25%