数学建模社区-数学中国

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

作者: 2744557306    时间: 2024-3-31 16:37
标题: 房价预测(线性回归)
数据集:使用加利福尼亚房价数据集。# J3 x3 r, z; M3 i
任务:构建一个模型预测加利福尼亚地区的房价。4 l" W6 E0 }" P* A4 C+ d) `
挑战:尝试不同的预处理方法(标准化、归一化等)和特征选择技术来改进模型性能。; I/ a5 Z2 x+ L8 h' S( [# J' N
线性回归是一种预测数值型数据的经典统计方法,它假设目标值和特征之间存在线性关系。在房价预测任务中,我们可以使用线性回归模型来预测基于多个特征(如房屋大小、位置、年龄等)的房价。以下是使用加利福尼亚房价数据集进行房价预测的示例代码,以及如何应用不同的预处理方法和特征选择技术来改进模型性能。) Z8 F3 t$ x! C3 H! Z

1 T! a' Y# f8 \6 q; K加载和预处理数据8 F. L; K% Y8 U" L
首先,我们从scikit-learn中加载加利福尼亚房价数据集,并进行基本的数据预处理。
  1. from sklearn.datasets import fetch_california_housing
    ' u0 ^/ \& z) t) Z& F
  2. ) x9 r$ ]1 D5 }2 R* b2 D* p
  3. from sklearn.model_selection import train_test_split; t) b- N+ }6 f
  4. 5 `9 v, @9 E+ b% ^: a$ z! f9 n( E
  5. from sklearn.preprocessing import StandardScaler+ \% }9 J5 x1 j. W9 b' A. c

  6. 8 L- j7 X8 O( E6 v( A2 i8 T. ~/ w
  7. from sklearn.linear_model import LinearRegression
    : B* D' O. ~) Y8 V* V" ^6 ^! S" V

  8.   R, V8 M' Q5 J" o; ~
  9. from sklearn.metrics import mean_squared_error9 @, M! u4 w: u% o/ H& _; h3 k9 d* _
  10. 7 ~$ j2 y# c1 w
  11. % a- y4 }8 P8 V! P
  12. % s9 t+ o' H2 T; o
  13. # 加载数据集
      l3 R8 f% X( D6 l) {  k/ M/ N
  14. 7 \1 ?. N; m9 w( G, b7 n
  15. housing = fetch_california_housing()
    6 ?  z9 @* l1 K* d

  16. ; g! C- O2 M5 s# ^) b  n
  17. X, y = housing.data, housing.target
    1 e* Y3 I6 U3 X* m# M9 x

  18. / i& Q% ?* R' U  p

  19. 8 S6 g! d. Q" Z" W# c- A. H

  20. # ]: k+ z& _% z* T# l* L
  21. # 划分训练集和测试集
    - I7 v3 _/ F4 L  Z" o: L' J1 q. j& B0 p

  22. ! q0 Q' o& ~, i7 \( c7 [
  23. X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
    6 D7 ]+ \. A9 [' g: {/ o+ x. X" @

  24. 8 V5 {- X1 a  Q' \
  25. 9 O6 h, v/ X( V" s4 [
  26. 6 I& k: W" ?9 n9 A
  27. # 数据预处理:标准化: L8 I9 z9 P+ f& R5 F5 G: }% _; Y7 ~
  28. . [7 h, Z, r6 f0 F0 w+ w
  29. scaler = StandardScaler()
    / W% o# R  \2 ^& o' ?' T+ j# n6 Q

  30. " _5 _! W- f- t- b3 ?
  31. X_train_scaled = scaler.fit_transform(X_train)
    ) @  Y4 O9 P/ [: r7 p) i- s1 f1 e
  32. 1 C* Q! Q: s. |  m+ Q0 i
  33. X_test_scaled = scaler.transform(X_test)
复制代码
构建和训练线性回归模型
  1. # 创建线性回归模型
    " R% @  v1 g3 i. e: I% G
  2. model = LinearRegression()! l4 b5 \/ [2 t& [& k5 v

  3. + ]7 Y/ [* b, O. F
  4. # 训练模型) r. c3 r9 V0 e! Q& C, \
  5. model.fit(X_train_scaled, y_train); [3 ~% G( X$ Z3 b$ F

  6. ) {- Y9 y6 P4 q1 A8 Y4 |
  7. # 预测测试集
    9 K& ?3 T8 _/ R; j4 k' G
  8. y_pred = model.predict(X_test_scaled)% P) c- u6 \% B) @9 T

  9.   N; X7 e$ p6 O9 S( u/ s% e
  10. # 评估模型5 b. b, r3 }+ x3 t3 D+ y" ~
  11. mse = mean_squared_error(y_test, y_pred)
    " x) b- j: ?3 Y. Y6 c% M5 X0 ^4 u
  12. print(f"Mean Squared Error: {mse}")
复制代码
挑战:尝试不同的预处理方法和特征选择
1 v( K8 \( W6 X: t$ A预处理方法:除了标准化,你还可以尝试归一化(MinMaxScaler)、对数转换等方法,看看它们如何影响模型的性能。
2 q# e; J6 |( O! l" a- |* r特征选择:可以使用不同的特征选择方法(如SelectKBest, SelectFromModel)来选择最有影响力的特征,这有助于模型专注于最重要的信息,提高预测准确性。
  1. from sklearn.feature_selection import SelectKBest, f_regression' n1 b0 A2 F- m9 Y4 A0 Z
  2. . o0 S3 D) o6 r) O' ~  c' i+ J& N
  3. # 特征选择
    % t0 T5 [! P* D; y+ r3 [
  4. selector = SelectKBest(score_func=f_regression, k=5)
    $ W  y4 B8 y' o7 }: g1 I  i" G
  5. X_train_selected = selector.fit_transform(X_train_scaled, y_train): p( k  I  F7 a$ J% F- q
  6. X_test_selected = selector.transform(X_test_scaled); }1 T) u% [  j

  7. " B" g4 i& X* B$ z  F
  8. # 使用选择的特征重新训练模型
    % b" @: r9 k% \! {
  9. model.fit(X_train_selected, y_train)8 o! M! g0 U' j) z1 {# m( I2 d, N; d
  10. y_pred_selected = model.predict(X_test_selected)
    , n' v/ ~% g& O% l( }
  11. . ^+ b* V$ w5 Y- m* F+ {
  12. # 评估. v2 r( |0 I; r$ d+ u
  13. mse_selected = mean_squared_error(y_test, y_pred_selected)3 x/ e, N0 X/ h- J
  14. print(f"Mean Squared Error with selected features: {mse_selected}")
复制代码

( o  v, d& W5 ^& }5 U# u2 F! ?




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