数学建模社区-数学中国
标题:
房价预测(线性回归)
[打印本页]
作者:
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 G
6 N! Q% X( V8 h5 p# m, _; _
加载和预处理数据
3 Z9 e K8 H& `! s
首先,我们从scikit-learn中加载加利福尼亚房价数据集,并进行基本的数据预处理。
from sklearn.datasets import fetch_california_housing
7 U7 x7 B2 x1 G: B
) N/ k/ ~, g7 x0 y1 J
from sklearn.model_selection import train_test_split
$ R8 G3 Z; q8 o4 H# u, e
4 u( j! Q8 _" W; v
from sklearn.preprocessing import StandardScaler
( t+ b( x: L/ D3 d
1 `, b- ~/ T6 a
from sklearn.linear_model import LinearRegression
- u1 Z1 O* c* Q# z1 S: V3 P9 R2 a# k
0 u; f/ {; m* ]2 i" H
from sklearn.metrics import mean_squared_error
6 |( |7 L: c7 e% j9 |$ v
4 R4 {# ^3 N# n
' H! m/ F8 E# P* f3 f G: [
( L- Q& |$ k# N. l
# 加载数据集
; O8 m3 n9 R; Z% L& v
0 Y% o. P4 ?+ u' l v
housing = fetch_california_housing()
) ^/ t4 ?! G+ P$ q1 u
& V! S4 H8 W/ o) u0 L
X, y = housing.data, housing.target
" p$ U, h0 v! ?. ]# b% `
2 o' A# m* y7 J5 W! c H
" O) h$ l0 x$ x& J' P R/ V8 F( C
. W$ w3 F! ^9 P- t8 K
# 划分训练集和测试集
( v0 F+ M# G6 R3 W
0 f( n: x; `* U- {, G1 g4 B
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
) J8 G; W) D0 V& L
- E9 E: i0 l9 m
3 Q- F7 i: ?1 d1 g9 E; z
# 数据预处理:标准化
! o* M! w& H8 ~; }5 P& g! ~
' d9 ?* c1 z3 Z6 H- ~3 w/ D
scaler = StandardScaler()
- u4 b0 {7 @/ X" M0 W! v
8 [- }, I# t& [% ]' ?$ E7 [8 e# m1 `
X_train_scaled = scaler.fit_transform(X_train)
. Y& f& F( ^+ V2 f) ]* a
! h1 O0 o3 e+ ?9 Z% U/ X6 r3 t
X_test_scaled = scaler.transform(X_test)
复制代码
构建和训练线性回归模型
# 创建线性回归模型
+ {2 O9 n) E0 Z" }; a5 o
model = LinearRegression()
$ _8 R [+ z! z$ S; n- Z
% f& u9 Z0 z( [! V, }- v
# 训练模型
! P& j+ }% E- @
model.fit(X_train_scaled, y_train)
1 K" i9 e' {, D/ [6 ^2 F8 o4 b
3 G& H& o+ |6 w/ j
# 预测测试集
- L# N, S& ~1 W8 f
y_pred = model.predict(X_test_scaled)
+ Q1 T1 K1 W1 |% ^: U+ b% R2 H" G
0 \9 Y: \# I. d- x* \
# 评估模型
; d2 N( j' D/ U8 C) [
mse = mean_squared_error(y_test, y_pred)
9 J% T( q- ~! Y# O; J8 ^5 h
print(f"Mean Squared Error: {mse}")
复制代码
挑战:尝试不同的预处理方法和特征选择
$ L) L8 v4 ?4 F* W4 B3 |8 ?
预处理方法:除了标准化,你还可以尝试归一化(MinMaxScaler)、对数转换等方法,看看它们如何影响模型的性能。
! U4 B3 A* C. S4 n
特征选择:可以使用不同的特征选择方法(如SelectKBest, SelectFromModel)来选择最有影响力的特征,这有助于模型专注于最重要的信息,提高预测准确性。
from sklearn.feature_selection import SelectKBest, f_regression
; `# m0 F7 j- H5 R0 d9 i
# S: M! V. a5 w( H5 K Q1 \3 b. E
# 特征选择
L; o" K. Q, E
selector = SelectKBest(score_func=f_regression, k=5)
' t: k; L' X. H8 b# ^
X_train_selected = selector.fit_transform(X_train_scaled, y_train)
+ Y/ H% v5 \! g# o; p$ U; D* B5 S
X_test_selected = selector.transform(X_test_scaled)
$ Q. i- b# b" ?+ G: X0 Z
) K: T; p# @) b
# 使用选择的特征重新训练模型
! h/ f- q# l2 Y" D- R1 x0 |
model.fit(X_train_selected, y_train)
( C e" J! t( |+ q; J. D; Q
y_pred_selected = model.predict(X_test_selected)
3 ^1 i1 Y0 G4 p) S
8 d8 Q% }) j* L; `. Y
# 评估
9 W! N4 M- W9 ?* A# G
mse_selected = mean_squared_error(y_test, y_pred_selected)
6 j. }# i; Y) l- d
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