数学建模社区-数学中国

标题: 房价预测(线性回归) [打印本页]

作者: 2744557306    时间: 2024-3-31 16:37
标题: 房价预测(线性回归)
数据集:使用加利福尼亚房价数据集。1 @. w% O7 X; j4 ^- p# R% D# z8 _
任务:构建一个模型预测加利福尼亚地区的房价。
$ B' [- V6 ?& L& L挑战:尝试不同的预处理方法(标准化、归一化等)和特征选择技术来改进模型性能。2 p$ h5 v. Y7 |/ H% i9 \
线性回归是一种预测数值型数据的经典统计方法,它假设目标值和特征之间存在线性关系。在房价预测任务中,我们可以使用线性回归模型来预测基于多个特征(如房屋大小、位置、年龄等)的房价。以下是使用加利福尼亚房价数据集进行房价预测的示例代码,以及如何应用不同的预处理方法和特征选择技术来改进模型性能。
! J4 |) C! U: p0 f+ i7 j, Z) K7 m: L6 ]3 j" m9 m& H
加载和预处理数据3 W4 C1 H* Z6 v( L% K5 k
首先,我们从scikit-learn中加载加利福尼亚房价数据集,并进行基本的数据预处理。
  1. from sklearn.datasets import fetch_california_housing
    4 w( L- M3 Z! {, x' D

  2. 1 o( M3 D" n; W
  3. from sklearn.model_selection import train_test_split9 ]# g' [4 u+ l: H

  4. " u3 w! i2 i7 e3 c, A# R% J
  5. from sklearn.preprocessing import StandardScaler
    # ?: Y" W4 l) Z  R) }8 g5 a
  6.   b+ ^7 _4 x) Q  B8 a* l/ w4 r; o
  7. from sklearn.linear_model import LinearRegression0 N; f& G( m2 {' {

  8. 1 B7 a( P2 v5 b' ^+ l
  9. from sklearn.metrics import mean_squared_error8 `4 u! s2 h0 R; a  R3 r" l
  10. 1 Q7 s* J2 |& x

  11. & g6 `  Z6 j7 B* i# ^. B6 O
  12. 7 l2 D; n4 F6 Z0 E+ C/ ?% t
  13. # 加载数据集
    ' e$ I+ Y" X9 S- \/ F; |
  14. & r/ N/ }) z4 y. T
  15. housing = fetch_california_housing()4 ]1 `; `5 s- W- d, `/ x
  16. 6 m; K7 C& X) X
  17. X, y = housing.data, housing.target
    1 y0 C; \! E7 T6 O. `4 ~9 ~

  18. ( S( p: _& o- V" R3 ]

  19. . w; D1 ?/ }( O$ ~
  20. / W# r! @; b1 p
  21. # 划分训练集和测试集; @0 [/ D& i+ Q2 l/ U

  22. & S: ?. @; o# V
  23. X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
    2 `: k0 S. L4 V/ \

  24. 0 V5 ~- m6 W7 V; _

  25. ) z& q5 S9 ~# U6 L( ]5 b0 V# O# Y

  26. * R4 l! Q9 y" `- t0 _( L0 G: R
  27. # 数据预处理:标准化
    5 j! f1 L4 P9 T6 F5 ]5 B- F
  28. 2 e: g4 r* O! t1 r+ ~$ ?. V
  29. scaler = StandardScaler()
    6 v0 J' S3 d' z6 G$ d6 ?

  30. & m, i9 c" z; L; |2 p
  31. X_train_scaled = scaler.fit_transform(X_train)
    - P1 r, e- j' `3 Q4 X$ X# }
  32. 7 q1 J" t% |3 d7 y  L9 s
  33. X_test_scaled = scaler.transform(X_test)
复制代码
构建和训练线性回归模型
  1. # 创建线性回归模型# Y  B; u) k8 D' R' Y- V  V  g
  2. model = LinearRegression(): P, n7 u" i# y/ r; @4 Q$ l& G

  3. 6 H; b: N/ t% {3 w
  4. # 训练模型3 V: y% w& r+ L" X9 T# I
  5. model.fit(X_train_scaled, y_train)  q0 a/ ?. h2 |" ~6 m) N
  6. 3 I; c8 P. `1 c  V0 _$ w1 A+ h$ O
  7. # 预测测试集
    ' R+ y0 H) Y4 g3 c1 U
  8. y_pred = model.predict(X_test_scaled)$ }4 X  |" }4 x

  9. " b! l8 M5 O' p7 G% }" A3 h
  10. # 评估模型( f* d5 ^- I' _: h0 Z/ B
  11. mse = mean_squared_error(y_test, y_pred)6 N4 l; c; n. E' \
  12. print(f"Mean Squared Error: {mse}")
复制代码
挑战:尝试不同的预处理方法和特征选择
1 W0 }/ U" Z* h; g% g预处理方法:除了标准化,你还可以尝试归一化(MinMaxScaler)、对数转换等方法,看看它们如何影响模型的性能。+ i9 E' r2 B4 K
特征选择:可以使用不同的特征选择方法(如SelectKBest, SelectFromModel)来选择最有影响力的特征,这有助于模型专注于最重要的信息,提高预测准确性。
  1. from sklearn.feature_selection import SelectKBest, f_regression* N9 K. q: C! f6 @# [: j

  2. / J% X6 ]9 ~/ d. ?
  3. # 特征选择
    ( K7 f# `$ W8 o1 f. E% g+ J
  4. selector = SelectKBest(score_func=f_regression, k=5)
    2 R# o( q" s; v+ a% L9 L
  5. X_train_selected = selector.fit_transform(X_train_scaled, y_train)( d% {: V/ X' u) I  @7 M
  6. X_test_selected = selector.transform(X_test_scaled)
    ( K  d8 O! @, L" ?7 e- n6 d
  7.   b- H% Z# C8 u. d
  8. # 使用选择的特征重新训练模型' j& F8 Y9 @4 N1 J4 ^
  9. model.fit(X_train_selected, y_train)
    1 a3 r: Q/ j& \4 F" T
  10. y_pred_selected = model.predict(X_test_selected)
    2 C7 z" B, T; L- y2 {
  11. 5 J3 V3 }8 k0 {( J
  12. # 评估
    2 z9 C7 l  H  B  |, P  C/ y" a
  13. mse_selected = mean_squared_error(y_test, y_pred_selected)
    % |. I' |, m$ }7 R9 y+ w
  14. print(f"Mean Squared Error with selected features: {mse_selected}")
复制代码

  s" p4 g8 @" f; {




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5