数学建模社区-数学中国

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

作者: 2744557306    时间: 2024-3-31 16:37
标题: 房价预测(线性回归)
数据集:使用加利福尼亚房价数据集。
$ F! _- F/ P4 m* u5 E任务:构建一个模型预测加利福尼亚地区的房价。
" H4 n! E) l; Q1 _9 S8 t; {0 @4 S( u挑战:尝试不同的预处理方法(标准化、归一化等)和特征选择技术来改进模型性能。# k: A; ~9 r  B* h& Z% D' {
线性回归是一种预测数值型数据的经典统计方法,它假设目标值和特征之间存在线性关系。在房价预测任务中,我们可以使用线性回归模型来预测基于多个特征(如房屋大小、位置、年龄等)的房价。以下是使用加利福尼亚房价数据集进行房价预测的示例代码,以及如何应用不同的预处理方法和特征选择技术来改进模型性能。
' b0 K: ?3 I6 c8 A, p& n5 D9 F. g0 {2 S3 y3 ]
加载和预处理数据
# B6 m" a- H) k! M首先,我们从scikit-learn中加载加利福尼亚房价数据集,并进行基本的数据预处理。
  1. from sklearn.datasets import fetch_california_housing
    3 }# |. W$ Q% m8 G+ f* V3 }

  2. 7 D+ L: ?$ G6 i" u* j; t5 w: g
  3. from sklearn.model_selection import train_test_split8 F, x& o3 l$ ]( m1 [- u7 s

  4. : N. X* }+ d( _: w% e: O
  5. from sklearn.preprocessing import StandardScaler
    5 o4 v2 c) O$ ^, c4 z% ~

  6. 2 `" [9 q4 V6 ]9 e" n( T9 D% G
  7. from sklearn.linear_model import LinearRegression
    4 `3 ]6 ~# x+ `: g, _- Y, n  O
  8. 4 J: z3 [# h- }3 a0 j# h1 s& [! h
  9. from sklearn.metrics import mean_squared_error
    # O9 s0 a+ W; x0 u+ u. @' H+ ~% Q

  10. - _; H; w+ z0 i. x7 q6 @6 H; Q4 L" y
  11. $ ]' p( A- ^$ Z6 o% Y/ _
  12. . D$ x. h  ]' d1 q. n3 J" }
  13. # 加载数据集
    # Y0 M$ {8 s9 m* V1 d; W3 Y, h
  14. ) o- R: o  S7 ~. x( X
  15. housing = fetch_california_housing(). I  y3 }! \0 C3 N( K

  16. 0 ^+ ?& K& X' d2 e( P
  17. X, y = housing.data, housing.target
    ' ~2 |1 o& a) v" C+ e
  18. / \$ s( H8 i8 a! [# {8 ^+ p* u; _4 M
  19. 6 @7 v" h3 ^' p. w+ K$ d1 L
  20. 7 H9 ?" D. X3 _1 ~3 W+ `. w/ \
  21. # 划分训练集和测试集: Q2 H. V( K5 p4 p+ |' Z2 ?4 f9 G2 B

  22. * G, g* L" q7 @5 \) ~
  23. X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42): Y4 a) t0 y. o, |9 \% N" S

  24. ) M( t; q- V, @2 c' Z/ N

  25. 4 r8 L1 i6 R/ n# G! v+ M3 [% _  T. b
  26. ) c( k# t" q9 x8 f$ Q; J, A
  27. # 数据预处理:标准化1 \: N; V  R6 M( N. c8 B) t/ x7 k
  28. 9 ?1 ~4 B( D. B1 `) A
  29. scaler = StandardScaler()2 E: d7 |2 }8 J' g
  30. " P( k* o* ^6 I/ @
  31. X_train_scaled = scaler.fit_transform(X_train)
    . B+ E- N' q  c

  32. + f" D$ Y8 X5 w- H4 B& T
  33. X_test_scaled = scaler.transform(X_test)
复制代码
构建和训练线性回归模型
  1. # 创建线性回归模型* \& f: J% [7 D3 I+ o) C
  2. model = LinearRegression()
    4 N3 u; ?7 |+ Q% l

  3. 2 s' ~: L  D1 B' r0 P* f
  4. # 训练模型
    / k" C# t% c0 Q1 g: c5 n7 r
  5. model.fit(X_train_scaled, y_train)
    ; s! C# H0 R" x' A2 N/ W

  6. ' e* A4 w/ b9 P2 r) d3 O
  7. # 预测测试集
    9 ?- K( M' H$ Y2 \' \
  8. y_pred = model.predict(X_test_scaled)& ]6 z9 V* T7 g1 G4 T% _3 c# }
  9. 3 \, u/ w6 W' R7 c. m, b/ c% ]. F
  10. # 评估模型
    $ Z+ K' {' C- N+ o1 ^/ \
  11. mse = mean_squared_error(y_test, y_pred)0 v# Y  v+ U+ U. \1 t
  12. print(f"Mean Squared Error: {mse}")
复制代码
挑战:尝试不同的预处理方法和特征选择* [4 D$ }" P  r& v/ Z) d5 E
预处理方法:除了标准化,你还可以尝试归一化(MinMaxScaler)、对数转换等方法,看看它们如何影响模型的性能。
3 {- p+ f; [! Q4 @( R0 {特征选择:可以使用不同的特征选择方法(如SelectKBest, SelectFromModel)来选择最有影响力的特征,这有助于模型专注于最重要的信息,提高预测准确性。
  1. from sklearn.feature_selection import SelectKBest, f_regression7 ]7 |+ I+ u1 E* r0 i- ~7 z, f

  2. 8 n. W% Y0 g  ^  {  {
  3. # 特征选择5 [# S$ P2 |* m/ Q& a" I8 P1 y
  4. selector = SelectKBest(score_func=f_regression, k=5)# U2 e* `+ u2 `7 a; {+ T
  5. X_train_selected = selector.fit_transform(X_train_scaled, y_train)
    $ }( C' F, `% h5 K; I! x8 Q( X
  6. X_test_selected = selector.transform(X_test_scaled)
    5 q$ q3 y, X  l6 k

  7. 3 D' W! `3 V5 W) W
  8. # 使用选择的特征重新训练模型
    ' E0 D3 G7 O' l$ k4 [$ m
  9. model.fit(X_train_selected, y_train)9 v" n! V) w5 \6 O* r4 v6 n' n
  10. y_pred_selected = model.predict(X_test_selected)
    " N' Y, m: }, U3 {3 [* T
  11. : M! {! o9 j7 t6 V9 D
  12. # 评估. P: Q2 J; p+ }, i3 W: m
  13. mse_selected = mean_squared_error(y_test, y_pred_selected)6 D5 a" o4 |7 h6 J7 x1 ]
  14. print(f"Mean Squared Error with selected features: {mse_selected}")
复制代码

0 k" t; t+ l8 ]) N3 @




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