数学建模社区-数学中国

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

作者: 2744557306    时间: 2024-3-31 16:37
标题: 房价预测(线性回归)
数据集:使用加利福尼亚房价数据集。. f4 n9 w6 T7 {$ s/ T# e2 p
任务:构建一个模型预测加利福尼亚地区的房价。
  z5 B4 y3 ~/ H& l0 j# [5 r挑战:尝试不同的预处理方法(标准化、归一化等)和特征选择技术来改进模型性能。
! j" Y: B# V6 V6 J! X线性回归是一种预测数值型数据的经典统计方法,它假设目标值和特征之间存在线性关系。在房价预测任务中,我们可以使用线性回归模型来预测基于多个特征(如房屋大小、位置、年龄等)的房价。以下是使用加利福尼亚房价数据集进行房价预测的示例代码,以及如何应用不同的预处理方法和特征选择技术来改进模型性能。
, k  g$ G5 |) s: x( D8 G6 N! Q% X( V8 h5 p# m, _; _
加载和预处理数据3 Z9 e  K8 H& `! s
首先,我们从scikit-learn中加载加利福尼亚房价数据集,并进行基本的数据预处理。
  1. from sklearn.datasets import fetch_california_housing
    7 U7 x7 B2 x1 G: B

  2. ) N/ k/ ~, g7 x0 y1 J
  3. from sklearn.model_selection import train_test_split
    $ R8 G3 Z; q8 o4 H# u, e

  4. 4 u( j! Q8 _" W; v
  5. from sklearn.preprocessing import StandardScaler( t+ b( x: L/ D3 d
  6. 1 `, b- ~/ T6 a
  7. from sklearn.linear_model import LinearRegression- u1 Z1 O* c* Q# z1 S: V3 P9 R2 a# k

  8. 0 u; f/ {; m* ]2 i" H
  9. from sklearn.metrics import mean_squared_error6 |( |7 L: c7 e% j9 |$ v
  10. 4 R4 {# ^3 N# n
  11. ' H! m/ F8 E# P* f3 f  G: [
  12. ( L- Q& |$ k# N. l
  13. # 加载数据集; O8 m3 n9 R; Z% L& v
  14. 0 Y% o. P4 ?+ u' l  v
  15. housing = fetch_california_housing()) ^/ t4 ?! G+ P$ q1 u
  16. & V! S4 H8 W/ o) u0 L
  17. X, y = housing.data, housing.target" p$ U, h0 v! ?. ]# b% `

  18. 2 o' A# m* y7 J5 W! c  H

  19. " O) h$ l0 x$ x& J' P  R/ V8 F( C
  20. . W$ w3 F! ^9 P- t8 K
  21. # 划分训练集和测试集( v0 F+ M# G6 R3 W

  22. 0 f( n: x; `* U- {, G1 g4 B
  23. X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
    7 ~( ]$ A. \9 @- V) T( _- I
  24. ) J8 G; W) D0 V& L

  25. - E9 E: i0 l9 m
  26. 3 Q- F7 i: ?1 d1 g9 E; z
  27. # 数据预处理:标准化! o* M! w& H8 ~; }5 P& g! ~
  28. ' d9 ?* c1 z3 Z6 H- ~3 w/ D
  29. scaler = StandardScaler()
    - u4 b0 {7 @/ X" M0 W! v

  30. 8 [- }, I# t& [% ]' ?$ E7 [8 e# m1 `
  31. X_train_scaled = scaler.fit_transform(X_train). Y& f& F( ^+ V2 f) ]* a
  32. ! h1 O0 o3 e+ ?9 Z% U/ X6 r3 t
  33. X_test_scaled = scaler.transform(X_test)
复制代码
构建和训练线性回归模型
  1. # 创建线性回归模型+ {2 O9 n) E0 Z" }; a5 o
  2. model = LinearRegression()$ _8 R  [+ z! z$ S; n- Z

  3. % f& u9 Z0 z( [! V, }- v
  4. # 训练模型! P& j+ }% E- @
  5. model.fit(X_train_scaled, y_train)
    1 K" i9 e' {, D/ [6 ^2 F8 o4 b

  6. 3 G& H& o+ |6 w/ j
  7. # 预测测试集
    - L# N, S& ~1 W8 f
  8. y_pred = model.predict(X_test_scaled)
    + Q1 T1 K1 W1 |% ^: U+ b% R2 H" G
  9. 0 \9 Y: \# I. d- x* \
  10. # 评估模型
    ; d2 N( j' D/ U8 C) [
  11. mse = mean_squared_error(y_test, y_pred)9 J% T( q- ~! Y# O; J8 ^5 h
  12. print(f"Mean Squared Error: {mse}")
复制代码
挑战:尝试不同的预处理方法和特征选择$ L) L8 v4 ?4 F* W4 B3 |8 ?
预处理方法:除了标准化,你还可以尝试归一化(MinMaxScaler)、对数转换等方法,看看它们如何影响模型的性能。
! U4 B3 A* C. S4 n特征选择:可以使用不同的特征选择方法(如SelectKBest, SelectFromModel)来选择最有影响力的特征,这有助于模型专注于最重要的信息,提高预测准确性。
  1. from sklearn.feature_selection import SelectKBest, f_regression; `# m0 F7 j- H5 R0 d9 i

  2. # S: M! V. a5 w( H5 K  Q1 \3 b. E
  3. # 特征选择
      L; o" K. Q, E
  4. selector = SelectKBest(score_func=f_regression, k=5)' t: k; L' X. H8 b# ^
  5. X_train_selected = selector.fit_transform(X_train_scaled, y_train)
    + Y/ H% v5 \! g# o; p$ U; D* B5 S
  6. X_test_selected = selector.transform(X_test_scaled)
    $ Q. i- b# b" ?+ G: X0 Z

  7. ) K: T; p# @) b
  8. # 使用选择的特征重新训练模型! h/ f- q# l2 Y" D- R1 x0 |
  9. model.fit(X_train_selected, y_train)
    ( C  e" J! t( |+ q; J. D; Q
  10. y_pred_selected = model.predict(X_test_selected)3 ^1 i1 Y0 G4 p) S

  11. 8 d8 Q% }) j* L; `. Y
  12. # 评估9 W! N4 M- W9 ?* A# G
  13. mse_selected = mean_squared_error(y_test, y_pred_selected)
    6 j. }# i; Y) l- d
  14. print(f"Mean Squared Error with selected features: {mse_selected}")
复制代码

1 a2 A! C8 p9 c+ z% o# v+ S




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