kaggle:房价预测

2024-06-03 03:44
文章标签 预测 kaggle 房价

本文主要是介绍kaggle:房价预测,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

比赛链接
结果展示
在这里插入图片描述
结果链接
8848是密码

文章目录

  • 数据处理
  • 调包部分
  • 拒绝掉包
    • 岭回归
      • 理论
      • 代码
      • 实践
      • 结果
    • 自助采样
      • 理论
      • 代码
    • 集成学习
      • 前言
      • Bagging理论
      • Bagging-Ridge代码
      • Bagging-Ridge实践
      • Bagging-Ridge结果
    • Tricks

数据处理

#打开文件
import pandas as pd
dataset1=pd.read_csv("train.csv")
dataset2=pd.read_csv("test.csv")
#按列处理,其中包括缺失值的填充,独热编码,放缩
import numpy as np
def function1(dataset):dataset['MSSubClass']=dataset['MSSubClass'].astype(str)data=dataset["Id"]for i in dataset.columns[1:]:try:sum(dataset[i])data_temp=dataset[i]data_temp.fillna(data_temp.dropna().mean(),inplace=True)data_temp=(data_temp-np.mean(data_temp))/np.std(data_temp)data=pd.concat([data,data_temp],axis=1)except:data_temp=pd.get_dummies(dataset[i])data=pd.concat([data,data_temp],axis=1)return data.astype(np.float64).to_numpy()[:,1:]
data_x=function1(pd.concat([dataset1.iloc[:,:-1],dataset2],axis=0))
data_train_x=data_x[:dataset1.shape[0]]
data_test_x=data_x[dataset1.shape[0]:]
#按行处理,对异常值进行处理
def function2(data):data.astype(np.int64)lt1=np.mean(data,axis=0)-3*np.std(data,axis=0)lt2=np.mean(data,axis=0)+3*np.std(data,axis=0)lt=[]for _ in data:for i in range(len(_)-1):if _[i]<lt1[i] or _[i]>lt2[i]:lt.append(False)breakelse:lt.append(True)return data[lt]
data_train=np.hstack((data_train_x,dataset1.iloc[:,-1].astype(np.float64).to_numpy()[:,np.newaxis]))
#data_train=function2(data_train)
data_train_x=data_train[:,:-1]
data_train_y=data_train[:,-1]

调包部分

lt=[]
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import BaggingRegressor
from sklearn.linear_model import Ridge
ridge=Ridge(15)
for i in range(5,101,5):md=BaggingRegressor(n_estimators=i,estimator=ridge,random_state=1)lt.append(np.sqrt(np.mean(-(cross_val_score(md,data_train_x,np.log(data_train_y),cv=10,scoring='neg_mean_squared_error')))))print(i)
import matplotlib.pyplot as plt
plt.plot([i for i in range(5,101,5)],lt)
plt.show()

在这里插入图片描述

md=BaggingRegressor(n_estimators=75,estimator=ridge,random_state=1).fit(data_train_x,np.log(data_train_y))
result=np.exp(md.predict(data_test_x).flatten())
result=np.vstack((np.array([i for i in range(1461,2920)]).astype(np.int32),result)).T
pd.DataFrame(result.astype(np.int32)).to_csv("result.csv",index=False,header=["Id","SalePrice"])

这些全都不是目的
我想过下基础知识

拒绝掉包

岭回归

理论

损失函数
J ( β ) = ∑ i = 1 n ( y i − β 0 − ∑ j = 1 p β j x i j ) 2 + λ ∑ j = 1 p β j 2 J(\beta)=\sum_{i=1}^n(y_i-\beta_0-\sum^p_{j=1}\beta_jx_{ij})^2+\lambda\sum_{j=1}^p\beta_j^2 J(β)=i=1n(yiβ0j=1pβjxij)2+λj=1pβj2
J ( β ) = ( y − X β ) T ( y − X β ) + λ β T β J(\beta)=(\mathbf y-\mathbf X\mathbf \beta )^T(\mathbf y-\mathbf X\mathbf \beta)+\lambda\beta^T\beta J(β)=(yXβ)T(yXβ)+λβTβ
求偏导数
∂ J ( β ) ∂ β = − 2 X T y + 2 X T X β + 2 λ β \frac{\partial J(\beta)}{\partial\beta}=-2\mathbf X^T\mathbf y+2\mathbf X^T\mathbf X\beta+2\lambda\beta βJ(β)=2XTy+2XTXβ+2λβ
令0求解
β = ( X T X + λ I ) − 1 X T y \beta=(\mathbf X^T\mathbf X+\lambda\mathbf I)^{-1}\mathbf X^T\mathbf y β=(XTX+λI)1XTy

代码

class Ridge:def __init__(self,l):self.l=ldef fit(self,x,y):return np.dot(np.dot(np.linalg.inv(np.dot(x.T,x)+self.l*np.identity(x.shape[1])),x.T),y)

实践

还是采用房价预测
数据处理与前一样

md=Ridge(15)
result=np.dot(data_test_x,md.fit(data_train_x,data_train_y))
result=np.vstack((np.array([i for i in range(1461,2920)]).astype(np.int32),result)).T
pd.DataFrame(result.astype(np.int32)).to_csv("result.csv",index=False,header=["Id","SalePrice"])

结果

在这里插入图片描述

自助采样

理论

设原始训练样本集为 D = ( x n , y n ) n = 1 N D={(x_n,y_n)}^N_{n=1} D=(xn,yn)n=1N,从D中重新采样得到一个重采样样本集 D ∗ D^* D D ∗ D^* D也由 N N N个样本组成,若采用自助采样从 D D D中重采样获得 D ∗ D^* D,则称 D ∗ D^* D为一个自助样本集(Bootstrap Samples)。自助采样是指,随机从 D D D中抽取一个样本放入 D ∗ D^* D中,同时将该样本放回 D D D中,按照这个方式采样 N N N次,组成自助样本集 D ∗ D^* D
由于是对 D D D做放回采样,采样过程是随机的故可对 D D D重采样 B B B轮,每轮得到 N N N个样本的自助样本集,故可获得 B B B个自主样本集,记为 D ∗ ( b ) , b = 1 , 2 , ⋯ , B D^{*(b)},b=1,2,\cdots,B D(b),b=1,2,,B。由于随机放回采样,各自助样本集 D ∗ ( b ) D^{*(b)} D(b)不同。
为了理解各自助样本集的不同,我们可以分析 D D D中的任意样本 ( x k , y k ) (x_k,y_k) (xk,yk)被包含在一个自助样本集 D ∗ ( j ) D^{*(j)} D(j)中的概率。从D中随机放回采样得到 D ∗ ( j ) D^{*(j)} D(j)的过程中,每次采样没有采样到 ( x k , y k ) (x_k,y_k) (xk,yk)的概率为 1 − 1 N 1-\frac{1}{N} 1N1,独立采样 N N N次均没有被采样到的概率为 ( 1 − 1 N ) N (1-\frac{1}{N})^N (1N1)N,故样本 ( x k , y k ) (x_k,y_k) (xk,yk)被包含在样本集 D ∗ ( j ) D^{*(j)} D(j)中的概率为 1 − ( 1 − 1 N ) N = 1 − e − 1 ≈ 0.632 1-(1-\frac{1}{N})^N=1-e^{-1}\approx0.632 1(1N1)N=1e10.632,以上假设 N N N充分大。上式说明,在构成自助样本集 D ∗ ( j ) D^{*(j)} D(j)式,大约可从 D D D中采集到约 63.2 % 63.2\% 63.2%的样本,即 D D D中约 36.8 % 36.8\% 36.8%的样本没有被采集到 D ∗ ( j ) D^{*(j)} D(j)中,从概率上讲,若抛弃重复样本 D ∗ ( j ) D^{*(j)} D(j)中只有大约 0.632 N 0.632N 0.632N的有效样本。两个自助样本集 D ∗ ( i ) D^{*(i)} D(i) D ∗ ( j ) D^{*(j)} D(j)内部包含的有效样本是随机的,故 D ∗ ( i ) D^{*(i)} D(i) D ∗ ( j ) D^{*(j)} D(j)相互具有随机性,且具有一定的不相关性。

代码

from random import randint
def Sampling(data_train_x,data_train_y):lt=[randint(0,data_train_x.shape[0]-1) for i in range(data_train_x.shape[0])]return data_train_x[lt],data_train_y[lt]

集成学习

前言

自助采样(Bootstrap)是统计学中的一种重采样技术,用于改善统计参数的估计,在集成学习中,可借助自助采样形成多个堆积样本集,在每个重采样的样本基础上训练一个基学习器,然后组合成为一个集成学习器。

Bagging理论

Bagging是Bootstrap Aggregation的简写。Baggin的思想是,首先由训练样本集 D D D,重采样得到 B B B个自助样本集 D ∗ ( b ) , b = 1 , 2 , ⋯ B D^{*(b)},b=1,2,\cdots B D(b),b=1,2,B,对于每个 D ∗ ( b ) D^{*(b)} D(b),通过基学习算法训练一个基学习器 f ^ ∗ ( b ) ( x ) \hat f^{*(b)}(\mathbf x) f^(b)(x),则Bagging集成学习器为 f ^ b a g ( x ) = 1 B ∑ b = 1 B f ^ ∗ ( b ) ( x ) \hat f_{bag}(\mathbf x)=\frac{1}{B}\sum^B_{b=1}\hat f^{*(b)}(\mathbf x) f^bag(x)=B1b=1Bf^(b)(x)

Bagging-Ridge代码

class Bagging:def __init__(self,n,f):self.n=nself.f=fdef fit(self,x,y):lt=[]for _ in range(self.n):data_train_x,data_train_y=Sampling(x,y)lt.append(self.f.fit(data_train_x,data_train_y))return np.mean(lt,axis=0)

Bagging-Ridge实践

md=Bagging(75,Ridge(15))
result=np.dot(data_test_x,md.fit(data_train_x,data_train_y))
result=np.vstack((np.array([i for i in range(1461,2920)]).astype(np.int32),result)).T
pd.DataFrame(result.astype(np.int32)).to_csv("result.csv",index=False,header=["Id","SalePrice"])

Bagging-Ridge结果

在这里插入图片描述

Tricks

可以采用某种二分算法手动微调。

这篇关于kaggle:房价预测的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

kaggle竞赛宝典 | Mamba模型综述!

本文来源公众号“kaggle竞赛宝典”,仅用于学术分享,侵权删,干货满满。 原文链接:Mamba模型综述! 型语言模型(LLMs),成为深度学习的基石。尽管取得了令人瞩目的成就,Transformers仍面临固有的局限性,尤其是在推理时,由于注意力计算的平方复杂度,导致推理过程耗时较长。 最近,一种名为Mamba的新型架构应运而生,其灵感源自经典的状态空间模型,成为构建基础模型的有力替代方案

Tensorflow lstm实现的小说撰写预测

最近,在研究深度学习方面的知识,结合Tensorflow,完成了基于lstm的小说预测程序demo。 lstm是改进的RNN,具有长期记忆功能,相对于RNN,增加了多个门来控制输入与输出。原理方面的知识网上很多,在此,我只是将我短暂学习的tensorflow写一个预测小说的demo,如果有错误,还望大家指出。 1、将小说进行分词,去除空格,建立词汇表与id的字典,生成初始输入模型的x与y d

临床基础两手抓!这个12+神经网络模型太贪了,免疫治疗预测、通路重要性、基因重要性、通路交互作用性全部拿下!

生信碱移 IRnet介绍 用于预测病人免疫治疗反应类型的生物过程嵌入神经网络,提供通路、通路交互、基因重要性的多重可解释性评估。 临床实践中常常遇到许多复杂的问题,常见的两种是: 二分类或多分类:预测患者对治疗有无耐受(二分类)、判断患者的疾病分级(多分类); 连续数值的预测:预测癌症病人的风险、预测患者的白细胞数值水平; 尽管传统的机器学习提供了高效的建模预测与初步的特征重

结合Python与GUI实现比赛预测与游戏数据分析

在现代软件开发中,用户界面设计和数据处理紧密结合,以提升用户体验和功能性。本篇博客将基于Python代码和相关数据分析进行讨论,尤其是如何通过PyQt5等图形界面库实现交互式功能。同时,我们将探讨如何通过嵌入式预测模型为用户提供赛果预测服务。 本文的主要内容包括: 基于PyQt5的图形用户界面设计。结合数据进行比赛预测。文件处理和数据分析流程。 1. PyQt5 图形用户界面设计

CNN-LSTM模型中应用贝叶斯推断进行时间序列预测

这篇论文的标题是《在混合CNN-LSTM模型中应用贝叶斯推断进行时间序列预测》,作者是Thi-Lich Nghiem, Viet-Duc Le, Thi-Lan Le, Pierre Maréchal, Daniel Delahaye, Andrija Vidosavljevic。论文发表在2022年10月于越南富国岛举行的国际多媒体分析与模式识别会议(MAPR)上。 摘要部分提到,卷积

多维时序 | Matlab基于SSA-SVR麻雀算法优化支持向量机的数据多变量时间序列预测

多维时序 | Matlab基于SSA-SVR麻雀算法优化支持向量机的数据多变量时间序列预测 目录 多维时序 | Matlab基于SSA-SVR麻雀算法优化支持向量机的数据多变量时间序列预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab基于SSA-SVR麻雀算法优化支持向量机的数据多变量时间序列预测(完整源码和数据) 2.SS

力扣 | 递归 | 区间上的动态规划 | 486. 预测赢家

文章目录 一、递归二、区间动态规划 LeetCode:486. 预测赢家 一、递归 注意到本题数据范围为 1 < = n < = 20 1<=n<=20 1<=n<=20,因此可以使用递归枚举选择方式,时间复杂度为 2 20 = 1024 ∗ 1024 = 1048576 = 1.05 × 1 0 6 2^{20} = 1024*1024=1048576=1.05 × 10^

回归预测 | MATLAB实现PSO-LSTM(粒子群优化长短期记忆神经网络)多输入单输出

回归预测 | MATLAB实现PSO-LSTM(粒子群优化长短期记忆神经网络)多输入单输出 目录 回归预测 | MATLAB实现PSO-LSTM(粒子群优化长短期记忆神经网络)多输入单输出预测效果基本介绍模型介绍PSO模型LSTM模型PSO-LSTM模型 程序设计参考资料致谢 预测效果 Matlab实现PSO-LSTM多变量回归预测 1.input和outpu

时序预测|变分模态分解-双向时域卷积-双向门控单元-注意力机制多变量时间序列预测VMD-BiTCN-BiGRU-Attention

时序预测|变分模态分解-双向时域卷积-双向门控单元-注意力机制多变量时间序列预测VMD-BiTCN-BiGRU-Attention 文章目录 一、基本原理1. 变分模态分解(VMD)2. 双向时域卷积(BiTCN)3. 双向门控单元(BiGRU)4. 注意力机制(Attention)总结流程 二、实验结果三、核心代码四、代码获取五、总结 时序预测|变分模态分解-双向时域卷积

【销售预测 ARIMA模型】ARIMA模型预测每天的销售额

输入数据txt格式: 2017-05-01 100 2017-05-02 200 ……. python 实现arima: # encoding: utf-8"""function:时间序列预测ARIMA模型预测每天的销售额author:donglidate:2018-05-25"""# 导入库import numpy as np # numpy库from statsmode