音效素材网提供各类素材,打造精品素材网站!

站内导航 站长工具 投稿中心 手机访问

音效素材

利用机器学习预测房价
日期:2021-09-08 14:05:35   来源:脚本之家

项目介绍

背景:

DC竞赛比赛项目,运用回归模型进行房价预测。

数据介绍:

数据主要包括2014年5月至2015年5月美国King County的房屋销售价格以及房屋的基本信息。

其中训练数据主要包括10000条记录,14个字段,分别代表:

  • 销售日期(date):2014年5月到2015年5月房屋出售时的日期;
  • 销售价格(price):房屋交易价格,单位为美元,是目标预测值;
  • 卧室数(bedroom_num):房屋中的卧室数目;
  • 浴室数(bathroom_num):房屋中的浴室数目;
  • 房屋面积(house_area):房屋里的生活面积;
  • 停车面积(park_space):停车坪的面积;
  • 楼层数(floor_num):房屋的楼层数;
  • 房屋评分(house_score):King County房屋评分系统对房屋的总体评分;
  • 建筑面积(covered_area):除了地下室之外的房屋建筑面积;
  • 地下室面积(basement_area):地下室的面积;
  • 建筑年份(yearbuilt):房屋建成的年份;
  • 修复年份(yearremodadd):房屋上次修复的年份;
  • 纬度(lat):房屋所在纬度;
  • 经度(long):房屋所在经度。

目标:

算法通过计算平均预测误差来衡量回归模型的优劣。平均预测误差越小,说明回归模型越好。

代码详解

数据导入

先导入分析需要的python包:

#导入类库和加载数据集
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline

导入下载好的kc_train的csv文件:

#读取数据
train_names = ["date",
               "price",
               "bedroom_num",
               "bathroom_num",
               "house_area",
               "park_space",
               "floor_num",
               "house_score",
               "covered_area",
               "basement_area",
               "yearbuilt",
               "yearremodadd",
               "lat",
               "long"]
data = pd.read_csv("kc_train.csv",names=train_names)
data.head()

在这里插入图片描述

数据预处理

查看数据集概况

# 观察数据集概况
data.info()

在这里插入图片描述

从图中可以看出没有任何缺失值,因此不需要对缺失值进行处理。

拆分数据

把原始数据中的年月日拆开,然后根据房屋的建造年份和修复年份计算一下售出时已经过了多少年,这样就有17个特征。

sell_year,sell_month,sell_day=[],[],[]
house_old,fix_old=[],[]
for [date,yearbuilt,yearremodadd] in data[['date','yearbuilt','yearremodadd']].values:
    year,month,day=date//10000,date%10000//100,date%100
    sell_year.append(year)
    sell_month.append(month)
    sell_day.append(day)
    house_old.append(year-yearbuilt)
    if yearremodadd==0:
        fix_old.append(0)
    else:
        fix_old.append(year-yearremodadd)
del data['date']
data['sell_year']=pd.DataFrame({'sell_year':sell_year})
data['sell_month']=pd.DataFrame({'sell_month':sell_month})
data['sell_day']=pd.DataFrame({'sell_day':sell_day})
data['house_old']=pd.DataFrame({'house_old':house_old})
data['fix_old']=pd.DataFrame({'fix_old':fix_old})
data.head()

在这里插入图片描述

观察因变量(price)数据情况

#观察数据
print(data['price'].describe())

在这里插入图片描述

#观察price的数据分布
plt.figure(figsize = (10,5))
# plt.xlabel('price')
sns.distplot(data['price'])

在这里插入图片描述

从数据和图片上可以看出,price呈现典型的右偏分布,但总体上看还是符合一般规律。

相关性分析

自变量与因变量的相关性分析,绘制相关性矩阵热力图,比较各个变量之间的相关性:

#自变量与因变量的相关性分析
plt.figure(figsize = (20,10))
internal_chars = ['price','bedroom_num','bathroom_num','house_area','park_space','floor_num','house_score','covered_area'
                  ,'basement_area','yearbuilt','yearremodadd','lat','long','sell_year','sell_month','sell_day',
                 'house_old','fix_old']
corrmat = data[internal_chars].corr()  # 计算相关系数
sns.heatmap(corrmat, square=False, linewidths=.5, annot=True) #热力图
csdn.net/jlf7026/article/details/84630414

在这里插入图片描述

相关性越大,颜色越浅。看着可能不太清楚,因此看下排名

#打印出相关性的排名
print(corrmat["price"].sort_values(ascending=False))

在这里插入图片描述

可以看出house_area,house_score,covered_area,bathroom_num这四个特征对price的影响最大,都超过了0.5。负数表明与price是负相关的。

特征选择

一般来说,选择一些与因变量(price)相关性比较大的做特征,但我尝试过选择前十的特征,然后进行建模预测,但得到的结果并不是很好,所以我还是把现有的特征全部用上。

归一化

对于各个特征的数据范围不一样,影响线性回归的效果,因此归一化数据。

#特征缩放
data = data.astype('float')
x = data.drop('price',axis=1)
y = data['price']
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
newX= scaler.fit_transform(x)
newX = pd.DataFrame(newX, columns=x.columns)
newX.head()

在这里插入图片描述

划分数据集

#先将数据集分成训练集和测试集
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split(newX, y, test_size=0.2, random_state=21)

建立模型

选择两个模型进行预测,观察那个模型更好。

  • 线性回归
  • 随机森林
#模型建立
from sklearn import metrics
def RF(X_train, X_test, y_train, y_test):    #随机森林 
    from sklearn.ensemble import RandomForestRegressor
    model= RandomForestRegressor(n_estimators=200,max_features=None)
    model.fit(X_train, y_train)
    predicted= model.predict(X_test)
    mse = metrics.mean_squared_error(y_test,predicted)
    return (mse/10000)
def LR(X_train, X_test, y_train, y_test):    #线性回归
    from sklearn.linear_model import LinearRegression            
    LR = LinearRegression()
    LR.fit(X_train, y_train)
    predicted = LR.predict(X_test)
    mse = metrics.mean_squared_error(y_test,predicted)
    return (mse/10000)

评价标准

算法通过计算平均预测误差来衡量回归模型的优劣。平均预测误差越小,说明回归模型越好。

print('RF mse: ',RF(X_train, X_test, y_train, y_test))
print('LR mse: ',LR(X_train, X_test, y_train, y_test))

在这里插入图片描述

可以看出,随机森林算法比线性回归算法要好很多。

总结

对机器学习有了初步了解。但对于数据的预处理,和参数,特征,模型的调优还很欠缺。

希望通过以后的学习,能不断提高。也希望看这篇文章的朋友和我一起感受机器学习的魅力,更多相关机器学习内容请搜索以前的文章或继续浏览下面的相关文章,希望大家以后多多支持!

    您感兴趣的教程

    在docker中安装mysql详解

    本篇文章主要介绍了在docker中安装mysql详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编...

    详解 安装 docker mysql

    win10中文输入法仅在桌面显示怎么办?

    win10中文输入法仅在桌面显示怎么办?

    win10系统使用搜狗,QQ输入法只有在显示桌面的时候才出来,在使用其他程序输入框里面却只能输入字母数字,win10中...

    win10 中文输入法

    一分钟掌握linux系统目录结构

    这篇文章主要介绍了linux系统目录结构,通过结构图和多张表格了解linux系统目录结构,感兴趣的小伙伴们可以参考一...

    结构 目录 系统 linux

    PHP程序员玩转Linux系列 Linux和Windows安装

    这篇文章主要为大家详细介绍了PHP程序员玩转Linux系列文章,Linux和Windows安装nginx教程,具有一定的参考价值,感兴趣...

    玩转 程序员 安装 系列 PHP

    win10怎么安装杜比音效Doby V4.1 win10安装杜

    第四代杜比®家庭影院®技术包含了一整套协同工作的技术,让PC 发出清晰的环绕声同时第四代杜比家庭影院技术...

    win10杜比音效

    纯CSS实现iOS风格打开关闭选择框功能

    这篇文章主要介绍了纯CSS实现iOS风格打开关闭选择框,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作...

    css ios c

    Win7如何给C盘扩容 Win7系统电脑C盘扩容的办法

    Win7如何给C盘扩容 Win7系统电脑C盘扩容的

    Win7给电脑C盘扩容的办法大家知道吗?当系统分区C盘空间不足时,就需要给它扩容了,如果不管,C盘没有足够的空间...

    Win7 C盘 扩容

    百度推广竞品词的投放策略

    SEM是基于关键词搜索的营销活动。作为推广人员,我们所做的工作,就是打理成千上万的关键词,关注它们的质量度...

    百度推广 竞品词

    Visual Studio Code(vscode) git的使用教程

    这篇文章主要介绍了详解Visual Studio Code(vscode) git的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。...

    教程 Studio Visual Code git

    七牛云储存创始人分享七牛的创立故事与

    这篇文章主要介绍了七牛云储存创始人分享七牛的创立故事与对Go语言的应用,七牛选用Go语言这门新兴的编程语言进行...

    七牛 Go语言

    Win10预览版Mobile 10547即将发布 9月19日上午

    微软副总裁Gabriel Aul的Twitter透露了 Win10 Mobile预览版10536即将发布,他表示该版本已进入内部慢速版阶段,发布时间目...

    Win10 预览版

    HTML标签meta总结,HTML5 head meta 属性整理

    移动前端开发中添加一些webkit专属的HTML5头部标签,帮助浏览器更好解析HTML代码,更好地将移动web前端页面表现出来...

    移动端html5模拟长按事件的实现方法

    这篇文章主要介绍了移动端html5模拟长按事件的实现方法的相关资料,小编觉得挺不错的,现在分享给大家,也给大家...

    移动端 html5 长按

    HTML常用meta大全(推荐)

    这篇文章主要介绍了HTML常用meta大全(推荐),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参...

    cdr怎么把图片转换成位图? cdr图片转换为位图的教程

    cdr怎么把图片转换成位图? cdr图片转换为

    cdr怎么把图片转换成位图?cdr中插入的图片想要转换成位图,该怎么转换呢?下面我们就来看看cdr图片转换为位图的...

    cdr 图片 位图

    win10系统怎么录屏?win10系统自带录屏详细教程

    win10系统怎么录屏?win10系统自带录屏详细

    当我们是使用win10系统的时候,想要录制电脑上的画面,这时候有人会想到下个第三方软件,其实可以用电脑上的自带...

    win10 系统自带录屏 详细教程

    + 更多教程 +
    ASP编程JSP编程PHP编程.NET编程python编程