在线时间 482 小时 最后登录 2026-9-11 注册时间 2023-7-11 听众数 4 收听数 0 能力 0 分 体力 7953 点 威望 0 点 阅读权限 255 积分 2978 相册 0 日志 0 记录 0 帖子 1183 主题 1198 精华 0 分享 0 好友 1
该用户从未签到
数据集:使用加利福尼亚房价数据集。
" C# b9 l- |' V" {" |$ ~ 任务:构建一个模型预测加利福尼亚地区的房价。
' s* e y D/ Y 挑战:尝试不同的预处理方法(标准化、归一化等)和特征选择技术来改进模型性能。
9 ]* C' h e" H 线性回归是一种预测数值型数据的经典统计方法,它假设目标值和特征之间存在线性关系。在房价预测任务中,我们可以使用线性回归模型来预测基于多个特征(如房屋大小、位置、年龄等)的房价。以下是使用加利福尼亚房价数据集进行房价预测的示例代码,以及如何应用不同的预处理方法和特征选择技术来改进模型性能。; Z; a, p; w& g7 w! [8 h
6 N7 _" \8 {% N/ e 加载和预处理数据
1 R3 c+ S @3 H/ R& K 首先,我们从scikit-learn中加载加利福尼亚房价数据集,并进行基本的数据预处理。from sklearn.datasets import fetch_california_housing0 v( }* B\\" D& e* }
; i) a; A6 p+ o! w4 i2 f\\" D from sklearn.model_selection import train_test_split
9 U1 r4 L' |# u2 _/ J
8 Z* e8 i5 F; f- B+ W from sklearn.preprocessing import StandardScaler6 o\\" G$ w& p6 X
8 p+ I& J2 {4 G( u% o from sklearn.linear_model import LinearRegression3 N6 z8 |$ T( v: Z3 J j1 C
: ^4 q% [5 M\\" C) J' L. m1 Y$ |* Y
from sklearn.metrics import mean_squared_error
4 l4 Y8 F. G2 U' K 3 B. n; ~; y: m2 S0 Y) b7 i
; F# @1 p1 b& K+ H\\" v
; t3 x: H' c; x# q8 @ # 加载数据集+ k/ y1 k* t( X1 h( m
2 y4 w' \& e D; K, A5 O housing = fetch_california_housing(). z: M8 U7 \6 y' c% N
8 ^5 G. M7 O. k h X, y = housing.data, housing.target( P/ d7 a/ j# ?6 Z
8 W6 ]; l0 o: B - a4 g5 ^$ S' N& b2 x
* B' s( w8 \) \
# 划分训练集和测试集
3 d6 J, ~: B( p+ { {; k
( P- j\\" L/ M2 o2 C X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
; @$ [% H! y4 h* \: O9 e7 i4 q 7 M) X, L: T\\" k% [5 @. z( @0 @/ k
9 @, h$ g4 d; ^) u2 x # K+ M V) k$ a+ E3 f8 ?
# 数据预处理:标准化. P% O( N& [1 Y
L, S0 f& |. x) Y
scaler = StandardScaler()
A5 L* L\\" b! l2 H, B8 D( c7 Q2 }
9 B9 C+ F! q. I' c X_train_scaled = scaler.fit_transform(X_train)9 c' ~+ V* E9 S9 e
0 ^1 i2 [ l4 ?! @. n& d6 N9 U X_test_scaled = scaler.transform(X_test)
构建和训练线性回归模型 # 创建线性回归模型4 k9 f! n; i Z# M) Y5 E: ^7 O
model = LinearRegression()
- v7 Z* [4 Y# b- ]. i
# @7 Z* o& g# w # 训练模型- ~9 W; i* c$ J1 j2 \
model.fit(X_train_scaled, y_train)& F; ^, |7 n/ V; v
3 k e4 R. y3 K K6 _* t! _ # 预测测试集5 G) t: A3 }/ n. g3 t- f8 G' {1 H
y_pred = model.predict(X_test_scaled): F) X7 M6 x. U. U% D7 Q
0 ^2 o; G$ ^9 w0 t
# 评估模型8 ` W+ t7 n A2 }: V3 j1 A; I% \
mse = mean_squared_error(y_test, y_pred)3 R) S, @ I) K. `3 N
print(f"Mean Squared Error: {mse}") 复制代码 挑战:尝试不同的预处理方法和特征选择9 m! v& G0 E3 U$ R P1 `' x
预处理方法:除了标准化,你还可以尝试归一化(MinMaxScaler)、对数转换等方法,看看它们如何影响模型的性能。7 [ k" U; V5 }0 e4 Z- T
特征选择:可以使用不同的特征选择方法(如SelectKBest, SelectFromModel)来选择最有影响力的特征,这有助于模型专注于最重要的信息,提高预测准确性。from sklearn.feature_selection import SelectKBest, f_regression4 j$ Y3 V5 x6 M0 |
R3 L0 J) x) h, F/ v; D) V) D! u2 o
# 特征选择- M- J' B6 v6 P% Q y
selector = SelectKBest(score_func=f_regression, k=5)' K* C6 N% j8 n, e& P5 k4 M! g
X_train_selected = selector.fit_transform(X_train_scaled, y_train)
4 Q; z0 l! R8 \ X_test_selected = selector.transform(X_test_scaled)
\" T# i0 l: [1 d ' G' a7 a7 U7 U\" R9 K1 c\" U
# 使用选择的特征重新训练模型
% `- [& U4 \, n7 | model.fit(X_train_selected, y_train)- X) @0 }' H9 X4 B& M
y_pred_selected = model.predict(X_test_selected); K' e! A$ [# {: h; ]
' v k+ V' \( P7 O6 x
# 评估$ X+ B* h& V: t6 ^- P
mse_selected = mean_squared_error(y_test, y_pred_selected). _ y! r* n* s& v; \ |
print(f"Mean Squared Error with selected features: {mse_selected}") 复制代码
6 Y' T0 \% k% V; d/ s. R4 I8 H& l0 Z
zan