Kaggle实战项目学习笔记01:房价预测案例

本文记录了作者在Kaggle上进行房价预测的实战过程,涉及了学习曲线、特征工程如独热编码和数据标准化,以及Ridge Regression、Stacking、Bagging、Boosting和XGBoost等模型的运用。文章讨论了如何确定合适算法,并分析了各种模型的优势和限制,特别强调了Ensemble方法在提升模型性能上的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一些学习前的想法:
自己拿Kaggl上的金价数据做过简单的模型分析,发现SVM的表现效果非常不好,随机森林还行…想要重新把机器学习的部分再学习一遍,再学一学深度学习的部分。

在这里插入图片描述
在这里插入图片描述
如何确定用什么算法
没有任何的标签的时候,–clustering(无监督)

常用工具 sklearn
只需要造出XY后就可以自动fit
gensim
NumPy
pandas(数据清洗时频繁用到)
XGBoost

学习曲线

过拟合该怎么办?
增大样本量,增加正则化作用

经济金融实战案例

在这里插入图片描述

a.分类/回归器

1.Linear/nonLinear
y = α+β*Xi + 残差项
根据order norm 因子选取等等的不同产生各种变种:
LR LASSO…

b.决策树
类似于分治思想:
把数据集分成两组,通过entropy熵和informationGain信息增益来决定从哪个var开始搞分裂
不同数据点被完美区分开了吗?
不是:重复楼上两步
是的:打完收工
优势:

  • 非黑盒
  • 轻松去除无关attribute(gain = 0)
  • test起来很块(O(depth))

量化交易目前还不能轻易使用深度学习(黑盒机制)

劣势:

  • 只能线性分割数据
  • 贪婪算法(可能找不到最好的树)(树枝中 谁在前谁在后的顺序改变会影响结果很大)

因此决策树是一个弱分类器。
把弱分类器ensemble集成为强分类器。
Bagging:类似于大多数人投票的方式
Random Forest:更加漂亮的bagging方式,多加了一层随机层
Boosting:把第一次学习时学的不好的地方多加一点权重,在下一次继续学习。

ensemble不是算法,只是一个算法框架。

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

房价预测案例

调用数据来自kaggle: house price 第一位

独热编码

当我们用numerical来表达categorical的时候,要注意,数字本身有大小的含义,所以乱用数字会给之后的模型学习带来麻烦。于是我们可以用one-hot的方法来表达category。
pandas自带的get_dummies方法,可以一键做到one-hot

标准化数据

这一步并不是必要。一般来说,regression分类器最好把源数据放在标准分布里,不要让数据间差距太大。

Ridge Regression

这里用Ridege Regression来跑的(对于多因子的数据集,这种模型可以方便的把所有的var都无脑放进去)

Stacking

把两种或多种模型的优点汲取
把最好的parameter拿出来,做成最终的model

一次正经的Ensemble是把几个model的预测结果作为新的input,再做一次预测,这里简单的直接平均化了。

模型进阶

Bagging

把很多的小分类器放在一起,每个train随机的一部分数据,然后把它们的最终结果综合起来(多数投票制)

Boosting

理论上稍微高级一些,也是揽来一把的分类器。但是把他们线性排列。下一个分类器把上一个分类器分类的不好的地方加上更高的权重,这样下一个分类器就能在这个部分学得更加“深刻”。

XGBoost

外号Kaggle神器。依旧是Boosting框架的模型,但是做了很多改进。

源代码:

import numpy as np
import pandas as pd
train_df = pd.read_csv('C:/documentstransfer/data analysis/house-prices-advanced-regression-techniques/train.csv',index_col=0)
test_df = pd.read_csv('C:/documentstransfer/data analysis/house-prices-advanced-regression-techniques/test.csv',index_col=0)

%matplotlib inline
prices = pd.DataFrame({"price":train_df["SalePrice"], "log(price + 1)":np.log1p(train_df["SalePrice"])})
prices.hist()

这里是引用

# 机器学习运用到了很多概率上的方法,数据集本身是偏着,所以结果也会偏,因此要对数据做一个标准化,使输出更符合正太分布
# 当然再现实中不能把测试集和训练集放在一起处理数据
# log(+1) 是为了防止出现price = 0的情况
# 最后计算结果时要把预测到的平滑数据变回去

y_train = np.log1p(train_df.pop('SalePrice')
all_df = pd.concat((train_df, test_df),axis=0)


# 变量转化/特征工程
# 读 data描述,其中有一个MSSubClass的特征,虽然用数字表示,但并没有数学意义上的大小关系比较
# 需要把他变成string


all_df['MSSubClass'] = all_df['MSSubClass'].astype(str)



# 一键one-hot
pd.get_dummies(all_df['MSSubClass'],
              prefix='MSSubClass').head()
# 一共形成了12个分类的独热编码

# pandas 可以自动读取所有由分类表达的特征
all_dummy_df = pd.get_dummies(all_df)
all_dummy_df.head()

#先打印出来哪些数据缺失
all_dummy_df.isnull().sum().sort_values(ascending = False).head()
# 这里用平均值处理缺失值
mean_cols = all_dummy_df.mean() 

all_dummy_df = all_dummy_df.fillna(mean_cols) # 填补空缺值

numeric_cols = all_df.columns[all_df.dtypes != 'object']

# 计算出每个numeric 的平均值和标准差,从而计算方程
numeric_col_means = all_dummy_df.loc[:,numeric_cols].mean()
numeric_col_std = all_dummy_df.loc[:,numeric_cols].std()
all_dummy_df.loc[:,numeric_cols] = (all_dummy_df.loc[:,numeric_cols] - numeric_col_means)/ numeric_col_std

dummy_train_df = all_dummy_df.loc[train_df.index]
dummy_test_df = all_dummy_df.loc[test_df.index]

from sklearn.linear_model import Ridge
from sklearn.model_selection import cross_val_score

# 这一步不是很必要,只是把DF转化成了Numpy Array,这跟sklearn更加配
X_train = dummy_train_df.values
X_test = dummy_test_df.values

# 用交叉验证测试模型选用哪一套
alphas = np.logspace(-3,2,50)
test_scores = []
for alpha in alphas:
    clf = Ridge(alpha)
    test_score = np.sqrt(-cross_val_score(clf,X_train,y_train,cv=10,scoring='neg_mean_squared_error'))
    test_scores.append(np.mean(test_score))

import matplotlib.pyplot as plt
%matplotlib inline
plt.plot(alphas, test_scores)
plt.title("Alpha vs CV Error")
# 可见,大概alpha=10-20时,score接近0.135          

在这里插入图片描述

from sklearn.ensemble import RandomForestRegressor

max_features = [.1, .3, .5, .7, .9, .99] #从10%--99%
test_scores = []
for max_feat in max_features:
    clf = RandomForestRegressor(n_estimators=200, max_features=max_feat)
    test_score = np.sqrt(-cross_val_score(clf, X_train, y_train, cv=5, scoring='neg_mean_squared_error'))
    test_scores.append(np.mean(test_score))

plt.plot(max_features, test_scores)
plt.title("Max Features vs CV Error")
# 大约再max features = 0.5时达到了最优值 大约为0.137-0.138

ridge = Ridge(alpha=15)
rf = RandomForestRegressor(n_estimators=500,max_features=0.5)
ridge.fit(X_train, y_train)
rf.fit(X_train,y_train)

# 因为最前面给label做了个log(1+x),于是这里需要把predict的值给exp回去,并且减掉那个“1”
# 所以就是我们的expm1()函数
y_ridge = np.expm1(ridge.predict(X_test))
y_rf = np.expm1(rf.predict(X_test))
y_final = (y_ridge + y_rf)/2
# 平均化预测结果

submission_df = pd.DataFrame(data = {'Id': test_df.index, 'SalePrice':y_final})
# 模型进阶
# bagging把很多的小分类器放在一起,每个train随机的一部分数据,然后把他们的最终结果综合起来(多数投票制)

from sklearn.ensemble import BaggingRegressor
from sklearn.model_selection import cross_val_score
# 在刚才的实验中,ridge(alpha=15)是最好的结果
from sklearn.linear_model import Ridge
ridge = Ridge(15)

Jupyter Notebook
房价预测案例(七月kaggle)
(自动保存)
Current Kernel Logo
Python 3 
File
Edit
View
Insert
Cell
Kernel
Widgets
Help

import numpy as np
import
<think>好的,用户想了解MCPModel Context Protocol)的相关信息及其在IT领域的应用。首先,我需要从提供的引用资料中提取关键点,并组织成一个结构清晰的回答。 根据引用[1],MCP是一个开放协议,用于AI应用与本地或远程资源的安全交互。引用[2]提到它实现了LLM应用与外部数据源的无缝集成,由uv这个Python包管理器支持。引用[3]则说明了其客户端-服务器架构、数据交换形式、安全机制和未来扩展计划。 接下来,我需要将信息分点整理,确保涵盖定义、核心功能、技术架构、应用场景、安全机制和未来发展。同时,要生成相关问题,帮助用户深入理解。要注意使用中文,正确应用LaTeX格式,比如提到协议版本时用$v1.0$,并引用标识。最后,检查是否符合所有系统级指令,特别是引用标注的位置和格式是否正确。</think>### MCPModel Context Protocol)模型上下文协议解析 #### 一、定义与核心功能 MCP是一种实现AI应用程序与本地/远程资源安全交互的开放协议,通过标准化接口支持LLM与外部数据源的无缝集成[^1][^2]。其核心功能包括: 1. 构建$AI \leftrightarrow Resource$双向通信通道 2. 支持JSON、XML、Protobuf等多种数据格式交换 3. 提供动态资源分配机制,如内存管理$M_{alloc}(size)$ 4. 实现访问控制策略$P_{access} = \{user, resource, permission\}$ #### 二、技术架构 采用客户端-服务器模式,当前架构包含: $$Client \xrightarrow[SSL/TLS]{REST API} Server \xrightarrow{Resource Manager} Data Sources$$ 其中uv工具包(Rust编写)提供快速部署能力,支持Python环境下的依赖管理 #### 三、典型应用场景 1. 企业知识库实时检索:$\exists x \in KB, query(x) \rightarrow result$ 2. 分布式计算资源调度 3. 多模态数据处理流水线 4. 联邦学习中的安全数据交换 #### 四、安全机制 协议内置三重防护: 1. 传输层加密:$E_{AES-256}(data)$ 2. 访问控制矩阵:$ACL = \bigcup_{i=1}^{n}(user_i, resource_i)$ 3. 操作审计日志:$\log(t)=\sum event(t_i)$ #### 五、未来发展路径 根据路线图,2024年将实现: 1. OAuth 2.0集成:$Auth_{flow} = code \rightarrow token$ 2. 跨云平台适配:$AWS \oplus Azure \oplus GCP$ 3. 量子安全加密升级:$QKD_{BB84}$协议支持[^3] ```python # MCP基础调用示例 import mcp client = mcp.Client(api_key="your_key") response = client.query( resource="database", operation="SELECT * FROM table WHERE condition='value'", format="SQL" ) print(response.data) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值