在线时间 480 小时 最后登录 2026-6-1 注册时间 2023-7-11 听众数 4 收听数 0 能力 0 分 体力 7823 点 威望 0 点 阅读权限 255 积分 2934 相册 0 日志 0 记录 0 帖子 1174 主题 1189 精华 0 分享 0 好友 1
该用户从未签到
数据集:使用加利福尼亚房价数据集。! f* H. A7 Y# w" j+ z# n
任务:构建一个模型预测加利福尼亚地区的房价。1 S3 ~! z9 X" F6 r0 S5 K' z$ K
挑战:尝试不同的预处理方法(标准化、归一化等)和特征选择技术来改进模型性能。
* G$ f- z* v# `; G3 x 线性回归是一种预测数值型数据的经典统计方法,它假设目标值和特征之间存在线性关系。在房价预测任务中,我们可以使用线性回归模型来预测基于多个特征(如房屋大小、位置、年龄等)的房价。以下是使用加利福尼亚房价数据集进行房价预测的示例代码,以及如何应用不同的预处理方法和特征选择技术来改进模型性能。# [ l1 }+ y- d
; `; n! B. `% R9 r* C- O4 D 加载和预处理数据
: ?' } ]$ p6 O 首先,我们从scikit-learn中加载加利福尼亚房价数据集,并进行基本的数据预处理。from sklearn.datasets import fetch_california_housing
2 _ @ S* Y1 r# i # U8 m/ N: O# ^1 t* c
from sklearn.model_selection import train_test_split
/ H! t# N+ [# Z' ] f6 D
, n3 o1 V7 x& n: G3 A! W\\" h2 F from sklearn.preprocessing import StandardScaler2 V. B1 Q% B# z& ~
# I: f- w: V% G$ x\\" y. C% g from sklearn.linear_model import LinearRegression. B3 J+ z# h* n4 W# |0 X. K7 B7 h
( a) _' T, K3 @\\" S' m% ?! P
from sklearn.metrics import mean_squared_error
: B9 y5 x0 ~( G6 d! o \\" h+ Y3 @4 r$ R2 Y
8 n# E/ T0 i* K, x1 E% b* _ 9 Q0 K+ _/ A( I4 I$ z1 U
# 加载数据集0 w0 W3 n6 a- D) U a! a, c
+ d8 [6 ~# @9 _) z
housing = fetch_california_housing() S7 `9 L; d\\" T3 s. l) r6 |
$ n# @' T- h7 I( r( E X, y = housing.data, housing.target6 h+ E* L' d! @1 p\\" q3 B
2 ]# w% a3 W7 ~- @- w
$ k% E+ E p( ?3 \: R
9 m; K; J7 x% A- [* o- p q* R6 h, L
# 划分训练集和测试集$ k4 z- ?( n' b9 v
- E; u) o$ Y8 J
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
2 P3 g% x! W5 U( ^
# V2 a) E2 p* V9 O0 f , l9 F& l. B/ j! H* T
8 u5 v7 T) g5 q1 |* U% a( y
# 数据预处理:标准化3 N- z; d8 V3 R y
3 a) |# U3 ^/ A5 W' j2 V, B2 s3 ^! g) T scaler = StandardScaler()+ m8 O$ s) V3 v {/ h5 z6 E
w2 I5 v- E( [. T
X_train_scaled = scaler.fit_transform(X_train), O4 a6 b. {: a2 F
: Y+ Y0 E3 F/ I8 K& s X_test_scaled = scaler.transform(X_test)
构建和训练线性回归模型 # 创建线性回归模型
& e3 { r8 C) L% `8 A# o% A# l model = LinearRegression()1 e- ` M/ {, q0 K\" U! _/ c
1 v% q5 h\" F; V' |) ?
# 训练模型
# B8 o) `: f* @' Y) X model.fit(X_train_scaled, y_train)0 S) h$ F8 Y( y8 f: h0 T2 n
7 s9 w2 }' G+ s
# 预测测试集$ S' L- q( l3 [
y_pred = model.predict(X_test_scaled)' h' l5 Y% n; v
& ?; p5 R' S$ P# [* i7 p # 评估模型! o4 s$ v3 b6 t\" w/ |
mse = mean_squared_error(y_test, y_pred)
; K7 I6 e- G9 a/ w: b4 @0 X( U print(f"Mean Squared Error: {mse}") 复制代码 挑战:尝试不同的预处理方法和特征选择+ h7 E& h/ U, T. k7 K! V
预处理方法:除了标准化,你还可以尝试归一化(MinMaxScaler)、对数转换等方法,看看它们如何影响模型的性能。
2 U m# ]% A1 i- A; A# s 特征选择:可以使用不同的特征选择方法(如SelectKBest, SelectFromModel)来选择最有影响力的特征,这有助于模型专注于最重要的信息,提高预测准确性。from sklearn.feature_selection import SelectKBest, f_regression
: y* n+ n4 }1 r
' J6 \2 P! X' K1 p # 特征选择: J8 R( Q' T3 s; b: i: J7 y
selector = SelectKBest(score_func=f_regression, k=5)
4 W# e8 P' F5 d3 Q+ s. X& G X_train_selected = selector.fit_transform(X_train_scaled, y_train)3 [$ }2 K+ o8 x8 X$ O: v4 G# G
X_test_selected = selector.transform(X_test_scaled)' t! z+ w1 C. l1 s3 ~: ?$ {
: A' V- l5 |7 d+ e& A, S! Z
# 使用选择的特征重新训练模型
3 S; C5 t- J4 V model.fit(X_train_selected, y_train)\" ^5 P, X! _/ w! l9 n, P* l9 m
y_pred_selected = model.predict(X_test_selected)
; |* D) v) X& ^( o \ - M( C- R5 G. S! q! y
# 评估
* n3 M+ ^4 ]+ h9 X mse_selected = mean_squared_error(y_test, y_pred_selected)
! Q5 d6 ?! o2 N+ a- s+ B print(f"Mean Squared Error with selected features: {mse_selected}") 复制代码 3 P0 X M$ N+ L1 Z: f8 M8 k d
zan