基于华为云DLI服务和MLS服务的房价预测任务

2024-03-12 19:20

本文主要是介绍基于华为云DLI服务和MLS服务的房价预测任务,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

基于华为云DLI服务和MLS服务的房价预测任务

参考:

华为云AI+大数据学习营DLI服务高阶课程

1. DLI服务与MLS服务说明

DLI官网地址:https://support.huaweicloud.com/productdesc-dli/dli_07_0001.html ,数据湖探索(Data Lake Insight,DLI)是完全托管的大数据处理分析服务。用户不需要管理任何服务器,即开即用。支持标准SQL,兼容SparkSQL,支持多种接入方式,并兼容主流数据格式。数据无需复杂的抽取、转换、加载,使用SQL或Spark程序就可以对华为云上CloudTable、RDS、DWS等异构数据进行探索。

根据我的实验了解,DLI服务提供了一种简单的数据库连接功能,使得开发者可以快速的访问存在云上的数据,同时兼备数据转换功能,比如从OBS上的CSV导入到数据库再导出。

MLS官网地址:https://support.huaweicloud.com/productdesc-mls/zh-cn_topic_user_guide.html ,机器学习服务(Machine Learning Service,简称MLS)是一项数据挖掘分析平台服务,旨在帮助用户通过机器学习技术发现已有数据中的规律,从而创建机器学习模型,并基于机器学习模型处理新的数据,为业务应用生成预测结果。

机器学习服务可降低机器学习使用门槛,提供可视化的操作界面来编排机器学习模型的训练、评估和预测过程,无缝衔接数据分析和预测应用,降低机器学习模型的生命周期管理难度,为用户的数据挖掘分析业务提供易用、高效、高性能的平台服务。

我的理解是MLS服务给非机器学习专业人士提供了一种简单易使用的图形化操作的平台,首先封装好了各种机器学习算法,以图形化节点的形式给出,用户仅需要添加各种节点(输入,输出,模型,数据处理等)就可以完成模型训练以及预测任务。

2. 任务分析

任务来源于Kaggle入门 房价预测比赛,任务描述很简单,我们需要根据给出的许多属性来预测这个房子的售价,关于属性的具体描述,需要去官网查看,这里就不多说了。

我们基于华为云完成这个比赛的流程是:

  1. 获取数据;
  2. 使用Python对数据进行初步清洗;
  3. 上传数据至华为云OBS进行存储;
  4. 使用DLI SQL将数据导入到DLI;
  5. 使用DLI SQL对数据进行进一步分析筛选;
  6. 导出筛选后的数据;
  7. 使用MLS服务创建房价预测模型;
  8. 使用MLS销售预测模型训练数据;
  9. 使用MLS销售预测模型预测数据。

3. 数据源及初步处理

首先从kaggle上下载数据集,解压后会得到4个文件,分别是data_description.txtsample_submission.csvtest.csvtrain.csv。第一个文件是对数据集中的各种属性特征的描述,第二个文件是上传结果的样本,后面的是需要预测的数据集和训练数据集,测试集比训练集少一列房屋售价SalePrice。我们暂时不做上传结果的这部分,仅将训练集划分出一部分数据作为验证集。

得到数据集后,用Python读取并分析

首先使用Pandas加载数据集,用head查看前10条记录

import pandas as pddf = pd.read_csv('./train.csv')
df.head(10)

大致情况如下,由于总计有81列,所以显示不完整,但基本了解了数据构成,第一列是Id,最后一列是SalePrice,中间部分列的数据类型是数字和字符串,还有很多NaN空数据。

在这里插入图片描述

接下来需要清除脏数据,一般来说脏数据包括空数据,错误存储的数据以及没有意义的数据,错误存储指的是属性值错误(一般较少),没有意义的数据指的是如果大部分数据该列都是一样的值,那么这一列是毫无意义的,我们这里仅对空数据进行处理,空数据的处理方式有多种,比如直接删除带有空数据的记录,或者按照平均值赋给空数据,这里我选择简单的删除空数据记录。在删除记录前还需要进行特征筛选,及删除NaN出现次数过多的特征列。

na_series = df.isnull().sum()
for col_name in na_series.index:if na_series[col_name] > 200:df = df.drop(columns=col_name, axis=1)print(col_name)

通过df.isnull().sum()可以获得所有列中空数据的个数,做一个简单判断,若空数据个数超过200,那么删除此列,最终删除了LotFrontage,Alley,FireplaceQu,PoolQC,Fence,MiscFeature,但是还是有很多列有几十个空数据,那么简单的把这些记录删除

df_without_na = df.dropna(axis=0)
df_without_na.describe()

最终我们的总记录数为1338,比原始1460仅少了一百多个,下图仅显示出数值特征的数据统计,也就是说在剩余的75列中有37列数值,剩下的都是字符串特征

在这里插入图片描述

保存结果

df_without_na.to_csv('./result.csv', index=False)

4. 上传至OBS并使用DLI筛选

result.csv文件上传至OBS,再打开DLI服务创建数据库,数据队列,按照下图方式生成数据表house_price_result

在这里插入图片描述
在这里插入图片描述

这里有75列,如果用SQL语句要写一会,我直接导入列信息,而且暂时所有特征都按照string类型处理,表建好后,使用SQL语句查看一下数据

SELECT * FROM house_price_result

大致结果如下,且数据记录条数与上面相对应

在这里插入图片描述

然后建一个空表用于保存我们希望筛选出的数据,这里我遇到了一些问题,比如DLI SQL语句似乎不支持DROP COLUMN删除指定列的操作,以及后面在MLS服务中会遇到特征名不能以数字开头,因此我就简单的把所有数值特征列筛选出来,放弃字符串特征,同时修改几个特征的名称1stFlrSF 2ndFlrSF 3SsnPorch修改为FirstFlrSF SecondFlrSF ThSsnPorch,而且Id列没有意义,因此也删除。

空表建立参照上一步

INSERT INTO house_price_output
SELECT MSSubClass,LotArea,OverallQual,OverallCond,YearBuilt,
YearRemodAdd,MasVnrArea,BsmtFinSF1,BsmtFinSF2,BsmtUnfSF,
TotalBsmtSF,1stFlrSF AS FirstFlrSF,2ndFlrSF AS SecondFlrSF,LowQualFinSF,GrLivArea,
BsmtFullBath,BsmtHalfBath,FullBath,HalfBath,BedroomAbvGr,
KitchenAbvGr,TotRmsAbvGrd,Fireplaces,GarageYrBlt,GarageCars,
GarageArea,WoodDeckSF,OpenPorchSF,EnclosedPorch,3SsnPorch AS ThSsnPorch,
ScreenPorch,PoolArea,MiscVal,MoSold,YrSold,SalePriceFROM house_price_result

再查看一下筛选后的数据

SELECT * FROM house_price_output

在这里插入图片描述

然后将筛选得到的数据导出到本地并重命名为train_data.csv,再手动将其中随机选择10条数据保存到另一个文件test_data.csv

5. 使用MLS服务训练及预测

购买MLS实例,创建项目mls_house_price,模板为销售预测,在文件系统上上传上面生成的两个csv文件,一个用于训练,另一个作为验证,然后开始工作流配置。

5.1 读取训练数据

在这里插入图片描述

这里选中表头

5.2 修改元数据

先删除默认的几个,然后会自动生成元数据类型,我们将最后一个SalePrice改为Target,这里其实可以自行更正,但是属性太多了,我就不改了,一般需要判断是否为连续值和离散值,离散值又分为有序和无序

在这里插入图片描述

5.3 数据拆分

在这里插入图片描述

没有做修改

5.4 模型选择

在这里插入图片描述

默认是随机森林,可以运行成功,但是后来我选了XGBoost,保存模型时失败,最后又选了线性模型,可以成功

5.5 模型保存及应用

模型保存需要命名,应用选择回归任务。

最后运行成功会得到一个模型文件,根据文件配置预测任务

5.6 读取预测模型

在这里插入图片描述

5.7 读取预测数据

在这里插入图片描述

5.8 定义元数据

同上面的训练数据,类型判断错误没关系,可以输出结果

在这里插入图片描述

5.9 保存预测结果

在这里插入图片描述

6. 结果及分析

验证集

60,13005,7,7,1980,1980,278,692,0,153,845,1153,1200,0,2353,1,0,2,1,4,1,10,1,1983,2,484,288,195,0,0,0,0,0,8,2009,260000
60,9000,8,5,2006,2006,0,0,0,1088,1088,1088,871,0,1959,0,0,2,1,3,1,8,1,2006,3,1025,208,46,0,0,0,0,0,12,2007,270000
60,9900,7,5,1993,1993,256,987,0,360,1347,1372,1274,0,2646,1,0,2,1,4,1,9,1,1993,3,656,340,60,144,0,0,0,0,4,2009,260000
80,14115,7,5,1980,1980,225,1036,0,336,1372,1472,0,0,1472,1,0,2,0,3,1,6,2,1980,2,588,233,48,0,0,0,0,0,6,2009,187500
60,16259,9,5,2006,2006,370,0,0,1249,1249,1249,1347,0,2596,0,0,3,1,4,1,9,0,2006,3,840,240,154,0,0,0,0,0,9,2006,342643

线性回归结果

60,16259,9,5,2006,2006,370,0,0,1249,1249,1249,1347,0,2596,0,0,3,1,4,1,9,0,2006,3,840,240,154,0,0,0,0,0,9,2006,342643,-3921777.404949966
60,13005,7,7,1980,1980,278,692,0,153,845,1153,1200,0,2353,1,0,2,1,4,1,10,1,1983,2,484,288,195,0,0,0,0,0,8,2009,260000,-3698731.5733633195
60,9000,8,5,2006,2006,0,0,0,1088,1088,1088,871,0,1959,0,0,2,1,3,1,8,1,2006,3,1025,208,46,0,0,0,0,0,12,2007,270000,-3014153.4134126855
60,10380,7,5,1986,1987,172,28,1474,0,1502,1553,1177,0,2730,1,0,2,1,4,1,8,1,1987,2,576,201,96,0,0,0,0,0,8,2007,301000,-3464773.5649124403
80,14115,7,5,1980,1980,225,1036,0,336,1372,1472,0,0,1472,1,0,2,0,3,1,6,2,1980,2,588,233,48,0,0,0,0,0,6,2009,187500,-973062.4298654792

这里产生了负数,真的是搞笑,这个模型可能出了很大的问题

随机森林结果

60,16259,9,5,2006,2006,370,0,0,1249,1249,1249,1347,0,2596,0,0,3,1,4,1,9,0,2006,3,840,240,154,0,0,0,0,0,9,2006,342643,369091.7578908035
60,13005,7,7,1980,1980,278,692,0,153,845,1153,1200,0,2353,1,0,2,1,4,1,10,1,1983,2,484,288,195,0,0,0,0,0,8,2009,260000,226257.40506458003
60,9000,8,5,2006,2006,0,0,0,1088,1088,1088,871,0,1959,0,0,2,1,3,1,8,1,2006,3,1025,208,46,0,0,0,0,0,12,2007,270000,263466.3077210762
60,10380,7,5,1986,1987,172,28,1474,0,1502,1553,1177,0,2730,1,0,2,1,4,1,8,1,1987,2,576,201,96,0,0,0,0,0,8,2007,301000,243418.1221194175
80,14115,7,5,1980,1980,225,1036,0,336,1372,1472,0,0,1472,1,0,2,0,3,1,6,2,1980,2,588,233,48,0,0,0,0,0,6,2009,187500,196635.50777727485

随机森林的结果为正数,但是与验证数据对比,差距还是很大,分析原因,首先我们没有使用任何字符串属性,因此损失了相当一部分信息,另一个是对数值属性的分类,仅依靠自动化分,有些属性应该是需要被作为连续值处理,或者离散值,但是没有检查,因此最终效果非常不好。

虽然这一次预测结果并不是很令人满意,但是从另一方面也发现了使用华为云服务可以进行kaggle部分比赛,比较适合没有大量计算资源的学生党吧,而且在实验过程中,能够分析出更进一步完善此项目的方法,后期可能会对这个实验进行完善以达到一个相对较好的结果。

这篇关于基于华为云DLI服务和MLS服务的房价预测任务的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/802316

相关文章

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。

基于SpringBoot的宠物服务系统+uniapp小程序+LW参考示例

系列文章目录 1.基于SSM的洗衣房管理系统+原生微信小程序+LW参考示例 2.基于SpringBoot的宠物摄影网站管理系统+LW参考示例 3.基于SpringBoot+Vue的企业人事管理系统+LW参考示例 4.基于SSM的高校实验室管理系统+LW参考示例 5.基于SpringBoot的二手数码回收系统+原生微信小程序+LW参考示例 6.基于SSM的民宿预订管理系统+LW参考示例 7.基于

828华为云征文|华为云Flexus X实例docker部署rancher并构建k8s集群

828华为云征文|华为云Flexus X实例docker部署rancher并构建k8s集群 华为云最近正在举办828 B2B企业节,Flexus X实例的促销力度非常大,特别适合那些对算力性能有高要求的小伙伴。如果你有自建MySQL、Redis、Nginx等服务的需求,一定不要错过这个机会。赶紧去看看吧! 什么是华为云Flexus X实例 华为云Flexus X实例云服务是新一代开箱即用、体

FreeRTOS学习笔记(二)任务基础篇

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、 任务的基本内容1.1 任务的基本特点1.2 任务的状态1.3 任务控制块——任务的“身份证” 二、 任务的实现2.1 定义任务函数2.2 创建任务2.3 启动任务调度器2.4 任务的运行与切换2.4.1 利用延时函数2.4.2 利用中断 2.5 任务的通信与同步2.6 任务的删除2.7 任务的通知2

Golang支持平滑升级的HTTP服务

前段时间用Golang在做一个HTTP的接口,因编译型语言的特性,修改了代码需要重新编译可执行文件,关闭正在运行的老程序,并启动新程序。对于访问量较大的面向用户的产品,关闭、重启的过程中势必会出现无法访问的情况,从而影响用户体验。 使用Golang的系统包开发HTTP服务,是无法支持平滑升级(优雅重启)的,本文将探讨如何解决该问题。 一、平滑升级(优雅重启)的一般思路 一般情况下,要实现平滑

Golang服务平滑重启

与重载配置相同的是我们也需要通过信号来通知server重启,但关键在于平滑重启,如果只是简单的重启,只需要kill掉,然后再拉起即可。平滑重启意味着server升级的时候可以不用停止业务。 我们先来看下Github上有没有相应的库解决这个问题,然后找到了如下三个库: facebookgo/grace - Graceful restart & zero downtime deploy for G

Flink任务重启策略

概述 Flink支持不同的重启策略,以在故障发生时控制作业如何重启集群在启动时会伴随一个默认的重启策略,在没有定义具体重启策略时会使用该默认策略。如果在工作提交时指定了一个重启策略,该策略会覆盖集群的默认策略默认的重启策略可以通过 Flink 的配置文件 flink-conf.yaml 指定。配置参数 restart-strategy 定义了哪个策略被使用。常用的重启策略: 固定间隔 (Fixe

第49课 Scratch入门篇:骇客任务背景特效

骇客任务背景特效 故事背景:   骇客帝国特色背景在黑色中慢慢滚动着! 程序原理:  1 、 角色的设计技巧  2 、克隆体的应用及特效的使用 开始编程   1、使用 黑色的背景: ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/7d74c872f06b4d9fbc88aecee634b074.png#pic_center)   2

华为OD机试真题-学生方阵-2024年OD统一考试(E卷)

题目描述 学校组织活动,将学生排成一个矩形方阵。 请在矩形方阵中找到最大的位置相连的男生数量。这个相连位置在一个直线上,方向可以是水平的,垂直的,成对角线的或者呈反对角线的。 注:学生个数不会超过10000 输入描述 输入的第一行为矩阵的行数和列数, 接下来的 n行为矩阵元素,元素间用""分隔。 输出描述 输出一个整数,表示矩阵中最长的位