- 在线时间
- 478 小时
- 最后登录
- 2026-4-9
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7788 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2922
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1171
- 主题
- 1186
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
数据集:使用加利福尼亚房价数据集。+ n( K$ {! B6 Z3 ?: Y1 r$ }' x
任务:构建一个模型预测加利福尼亚地区的房价。 w& x& g" B' E8 z9 c5 V# H/ B0 Z
挑战:尝试不同的预处理方法(标准化、归一化等)和特征选择技术来改进模型性能。
% K2 B M$ M7 M# s8 B线性回归是一种预测数值型数据的经典统计方法,它假设目标值和特征之间存在线性关系。在房价预测任务中,我们可以使用线性回归模型来预测基于多个特征(如房屋大小、位置、年龄等)的房价。以下是使用加利福尼亚房价数据集进行房价预测的示例代码,以及如何应用不同的预处理方法和特征选择技术来改进模型性能。
; A6 b- P; c1 {7 e+ Z: I: R" d% r" V2 ^
加载和预处理数据
M1 ?$ ^. I) ?& ?+ v8 g首先,我们从scikit-learn中加载加利福尼亚房价数据集,并进行基本的数据预处理。 - from sklearn.datasets import fetch_california_housing
- # t0 S; e; s9 e, X( u
- 1 }2 H0 ~- ~! F3 J) q! {# z
- from sklearn.model_selection import train_test_split
- . O, m/ m- v) S
- + _4 k3 |/ ?3 S1 q; t' T. Y# z
- from sklearn.preprocessing import StandardScaler
- ( ?* b' G; B- h! U: g1 q$ M
- . i% ~' J( \8 V: \\\" c& D
- from sklearn.linear_model import LinearRegression& B) X) F* `8 V( f9 i$ Q
- ; Q+ ]; n- ^+ N2 b4 `5 A& k$ k
- from sklearn.metrics import mean_squared_error, ?$ K8 w1 i8 {$ J5 {
- ) e/ S' @) m2 W. p! r- G
-
- 3 }5 H/ A. _0 L$ S3 I0 M
- - n2 D* |; F* g\\" U
- # 加载数据集
- - x- o8 `2 @3 J4 K4 y
- : {) r1 u/ K4 ]9 `
- housing = fetch_california_housing()' }) N+ P2 e2 q3 D
- 2 _) l- G1 p5 l# L. D- g
- X, y = housing.data, housing.target
- : b, i! n! h8 J5 q2 Q+ `% t
- n8 l& Y6 [( W3 I
-
- ' k& ^3 {1 g2 Z& i6 v
- / K3 P7 `: C, H5 ^8 w
- # 划分训练集和测试集
- 4 D5 F5 Y/ g0 K9 D% Y% a4 @# m
- & U; S! S7 ?9 V3 o6 H\\" Y: i
- X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
- ' |: \$ |2 w& K x8 k\\" \+ P2 n, h
- 1 j, J6 p' S. @
- 0 g/ c3 ~! L5 n4 [3 |3 C' \2 l
- & z0 h\\" H: H3 K) I\\" R+ [
- # 数据预处理:标准化
- \\" H1 @7 m, M5 c5 d5 C- i8 i
- ) K. s$ \9 K- I) T' Y
- scaler = StandardScaler()
- ' [* c3 a0 C$ v1 [2 m- @8 F9 I4 b; M
- . O' ^7 f) Y, z+ W; k Q4 _
- X_train_scaled = scaler.fit_transform(X_train)
- ; G+ C4 g/ t\\" o- x
- 1 ^: x( P. @6 {: @
- X_test_scaled = scaler.transform(X_test)
构建和训练线性回归模型- # 创建线性回归模型
5 L! C+ m& _7 Y$ | - model = LinearRegression()0 X0 v! t9 N\" e6 f
- . o) o# X1 N) W$ b
- # 训练模型! R J( V5 j: D P9 w
- model.fit(X_train_scaled, y_train)0 j\" v: i ?! k% @
-
1 u3 f/ d' D\" [- [ R - # 预测测试集
% Q% `/ |7 D7 D% Q |$ A; e - y_pred = model.predict(X_test_scaled)9 t\" u U\" s/ T0 N3 f* V. D
- 9 d; D; a0 S+ L5 ?$ X
- # 评估模型6 b6 M* k9 l. v* w; q! g6 a
- mse = mean_squared_error(y_test, y_pred)
3 O, `! \) i; m1 x' R, {7 H - print(f"Mean Squared Error: {mse}")
复制代码 挑战:尝试不同的预处理方法和特征选择
+ Z0 G+ \* z" N- e预处理方法:除了标准化,你还可以尝试归一化(MinMaxScaler)、对数转换等方法,看看它们如何影响模型的性能。
3 b+ V7 \, o' [特征选择:可以使用不同的特征选择方法(如SelectKBest, SelectFromModel)来选择最有影响力的特征,这有助于模型专注于最重要的信息,提高预测准确性。- from sklearn.feature_selection import SelectKBest, f_regression
\" {8 N, T+ ]8 k1 Z - . Q( O& ] M, [4 f1 \
- # 特征选择
! Y( G! N8 @) e3 ^5 e/ d% ~4 Z3 T - selector = SelectKBest(score_func=f_regression, k=5)
: l% x* U; E8 C# J$ W {0 V4 K - X_train_selected = selector.fit_transform(X_train_scaled, y_train)
# G) y3 s& L; N6 U* @) x S8 g4 g - X_test_selected = selector.transform(X_test_scaled)/ o1 O$ ~7 K( \: x1 z. b
- % C0 V$ G- r1 J1 Q
- # 使用选择的特征重新训练模型6 M. {% @, U# a8 `\" U
- model.fit(X_train_selected, y_train)0 X1 Q) F. H\" q2 S
- y_pred_selected = model.predict(X_test_selected)$ }5 @0 I( b8 A$ c
-
) ]1 U( d/ q; L& _4 ]4 _. v* d7 P - # 评估
/ W7 B9 o7 Q\" N. s' I2 M - mse_selected = mean_squared_error(y_test, y_pred_selected)
`+ J, L: o% L$ P8 j& i) d! ^ - print(f"Mean Squared Error with selected features: {mse_selected}")
复制代码 " g& ^- w1 d1 q1 b. Q2 h( u1 {8 a
|
zan
|