房价预测

背景:DC竞赛比赛项目,运用回归模型进行房价预测。
数据:主要包括2014年5月至2015年5月美国King County的房屋销售价格以及房屋的基本信息。
目标:算法通过计算平均预测误差来衡量回归模型的优劣。平均预测误差越小,说明回归模型越好。


流程图:

【一】数据观测

1>读取数据
IO = r'C:\Users\Administrator\Desktop\kc_train.csv'

def read_csv_data(IO):
    with open(IO) as f:
        reader = csv.reader(f)
        data = list(reader)
    print("Done")

    data_numpy = np.zeros((len(data), len(data[0])))
    for i, sample_list in enumerate(data):
        print(i)
        for index, iterm in enumerate(sample_list):
            if index==3 or index==12 or index==13:
                data_numpy[i, index] = str2float(iterm)
            else:
                data_numpy[i, index] = float(iterm)

    import h5py
    f = h5py.File("kc_train.hdf5", "w")
    f.create_dataset(name="data_set", data=data_numpy)
    f.close()

    return data_numpy

data = pd.read_csv(r'C:\Users\John\Desktop\DCastle\ML_DL\美国King County房价预测训练赛\kc_train.csv', header=None, names=['销售日期', '销售价格', '卧室数', '浴室数', '房屋面积', '停车面积', '楼层数', '房屋评分', '建筑面积', '地下室面积', '建筑年份','修复年份', '纬度', '经度'])
数据
2>观察数据
data['销售价格'].describe()
统计描述
plt.subplots(figsize=(12,9))
sns.distplot(data['销售价格'])
查看偏度与峰度
print("Skewness: %f" %data['销售价格'].skew())      #偏度
print("Kurtosis: %f" %data['销售价格'].kurt())      #峰度
Skewness: 3.898737
Kurtosis: 29.356202
3>相关性分析
import matplotlib.pyplot as plt
import seaborn as sns
plt.rcParams['font.sans-serif']=['SimHei'] 
plt.rcParams['axes.unicode_minus']=False

corrmat = data.corr()         
plt.subplots(figsize=(12,9))
sns.heatmap(corrmat, vmax=0.9, square=True,center=2.0)
相关性分析

相关性前10位的相关性分析

k = 10 
plt.figure(figsize=(12,9))
cols = corrmat.nlargest(k, '销售价格')['销售价格'].index
cm = np.corrcoef(data[cols].values.T)
sns.set(font_scale=1.25)
hm = sns.heatmap(cm, cbar=True, annot=True, square=True, fmt='.2f', annot_kws={'size': 10}, yticklabels=cols.values, xticklabels=cols.values)
plt.show()
前10位相关性分析
Corr = data.corr()
Corr[Corr['销售价格']>0.1]
强相关性

绘制维度的散点图

sns.set(font='SimHei)
cols = ['销售价格','卧室数','浴室数','房屋面积','楼层数','房屋评分','建筑面积','地下室面积','修复年份','纬度']
sns.pairplot(data[cols], size = 2.5)
plt.show();

散点图

【二】数据清洗

将各维度数据分析,删除明显的异常值。

1>连续变量
data1 = pd.concat([data['销售价格'], data['房屋面积']], axis=1)
data1.plot.scatter(x='房屋面积', y='销售价格', ylim=(0,800000));

fig = plt.figure() 
sns.distplot(data['房屋面积']);

from scipy import stats
fig = plt.figure()
res = stats.probplot(data['房屋面积'], plot=plt)
价格与面积的关系

直方图与正态概率图

同理观测连续变量后删除差距过大的异常值

2>离散变量
data2 = pd.concat([data['销售价格'], data['房屋评分']], axis=1)
f, ax = plt.subplots(figsize=(8, 6))
fig = sns.boxplot(x='房屋评分', y="销售价格", data=data2)
fig.axis(ymin=0, ymax=800000);
房价与评分的关系
3>特征变量

将时间处理成月份生成新的维度。

print(data.groupby('销售月份')['销售价格'].count())        #月份统计
plt.subplots(figsize=(12,9))
sns.countplot(x='销售月份',data=data)
房屋销售时间段
4>空值

本次项目中数据较为完整,没有空值存在,无需删除。


【三】建立模型

本次项目中选择随机森林,逻辑回归,SVM等。

1>数据选择

训练集,测试集比例为7:3。

def Data(IO):           
    X=pd.read_excel(IO)
    Y = X['销售价格']
    X= X.drop('销售价格'],axis = 1)
    X_train, X_test, y_train, y_test = \
        cross_validation.train_test_split( X, Y, test_size=0.3, random_state=0)
    return (X_train, X_test, y_train, y_test)
2>模型建立
def RF(X_train, X_test, y_train, y_test):    #随机森林 
    from  sklearn.ensemble  import  RandomForestClassifier
    model= RandomForestClassifier(n_estimators=100)
    model.fit(X_train, y_train)
    predicted= model.predict(X_test)
    score = accuracy_score(y_test, predicted)
    return (score)

def LOR(X_train, X_test, y_train, y_test):   #逻辑回归
    from sklearn.linear_model import LogisticRegression
    lor = LogisticRegression(penalty='l1',C=100,multi_class='ovr') 
    lor.fit(X_train, y_train)
    predicted= lor.predict(X_test)
    score = accuracy_score(y_test, predicted)
    return (score)

def Svm(X_train, X_test, y_train, y_test):   #支持向量机
    from sklearn import svm
    model = svm.SVC(kernel='rbf')
    model.fit(X_train, y_train)    
    predicted= model.predict(X_test)
    score = accuracy_score(y_test, predicted)
    return (score) 

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)
    score = accuracy_score(y_test, predicted)
    return ( score,LR.intercept_,LR.coef_)
3>模型融合

根据模型得分尝试不同比例的融合效果

eg:
result1 = 0.7*RF + 0.25*LOR+0.05*LR
result2 = 0.7*RF + 0.1*LOR+0.2*LR
result3 = 0.7*Svm + 0.25*LOR+0.2*LR 
result4 = 0.7*Svm + 0.1*LOR+0.2*LR

最后比较得出得分较高的模型,选择上传。


【四】比对总结

本次数据较为完整,数据清洗部分较为轻松。
给定的维度较少,根据经验需要做的特征工程较多。
比较而言,随机森林的预测效果最优,SVM调参后有性能提升的空间。


感谢江流静一的支持:
https://blog.csdn.net/u012063773

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,219评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,363评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,933评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,020评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,400评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,640评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,896评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,597评论 0 199
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,327评论 1 244
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,581评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,072评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,399评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,054评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,083评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,849评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,672评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,585评论 2 270

推荐阅读更多精彩内容

  • 今天为大家准备了一份基础知识,希望对大家用得上! 已购公房:已购公房又称售后公房,就是购买的公有住房 单位产权房:...
    塞班岛的海阅读 1,332评论 0 3
  • 听,有风扰波 她说今夜月色好美 看醉了的是谁 她说萍水相遇为缘 指尖颤抖相对 她说塔下誓言为盟 霓虹柔美眼眸 她说...
    还叫乐成阅读 221评论 1 1
  • 在2017年3月17日,我曾经想要放弃简书写作。 一个简书账号从无到有是一个很费神的事情,但是更让人费心费力的是每...
    董墨冉阅读 474评论 1 3
  • 工作了一段时间后,锐意进取的小伙伴们终于迎来了人生第一次的职场升迁。但是,烦恼也会随之而来。 毕竟在工作中的下属不...
    感悟牛阅读 405评论 0 5