数学建模社区-数学中国
标题:
房价预测(线性回归)
[打印本页]
作者:
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中加载加利福尼亚房价数据集,并进行基本的数据预处理。
from sklearn.datasets import fetch_california_housing
' u0 ^/ \& z) t) Z& F
) x9 r$ ]1 D5 }2 R* b2 D* p
from sklearn.model_selection import train_test_split
; t) b- N+ }6 f
5 `9 v, @9 E+ b% ^: a$ z! f9 n( E
from sklearn.preprocessing import StandardScaler
+ \% }9 J5 x1 j. W9 b' A. c
8 L- j7 X8 O( E6 v( A2 i8 T. ~/ w
from sklearn.linear_model import LinearRegression
: B* D' O. ~) Y8 V* V" ^6 ^! S" V
R, V8 M' Q5 J" o; ~
from sklearn.metrics import mean_squared_error
9 @, M! u4 w: u% o/ H& _; h3 k9 d* _
7 ~$ j2 y# c1 w
% a- y4 }8 P8 V! P
% s9 t+ o' H2 T; o
# 加载数据集
l3 R8 f% X( D6 l) { k/ M/ N
7 \1 ?. N; m9 w( G, b7 n
housing = fetch_california_housing()
6 ? z9 @* l1 K* d
; g! C- O2 M5 s# ^) b n
X, y = housing.data, housing.target
1 e* Y3 I6 U3 X* m# M9 x
/ i& Q% ?* R' U p
8 S6 g! d. Q" Z" W# c- A. H
# ]: k+ z& _% z* T# l* L
# 划分训练集和测试集
- I7 v3 _/ F4 L Z" o: L' J1 q. j& B0 p
! q0 Q' o& ~, i7 \( c7 [
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" @
8 V5 {- X1 a Q' \
9 O6 h, v/ X( V" s4 [
6 I& k: W" ?9 n9 A
# 数据预处理:标准化
: L8 I9 z9 P+ f& R5 F5 G: }% _; Y7 ~
. [7 h, Z, r6 f0 F0 w+ w
scaler = StandardScaler()
/ W% o# R \2 ^& o' ?' T+ j# n6 Q
" _5 _! W- f- t- b3 ?
X_train_scaled = scaler.fit_transform(X_train)
) @ Y4 O9 P/ [: r7 p) i- s1 f1 e
1 C* Q! Q: s. | m+ Q0 i
X_test_scaled = scaler.transform(X_test)
复制代码
构建和训练线性回归模型
# 创建线性回归模型
" R% @ v1 g3 i. e: I% G
model = LinearRegression()
! l4 b5 \/ [2 t& [& k5 v
+ ]7 Y/ [* b, O. F
# 训练模型
) r. c3 r9 V0 e! Q& C, \
model.fit(X_train_scaled, y_train)
; [3 ~% G( X$ Z3 b$ F
) {- Y9 y6 P4 q1 A8 Y4 |
# 预测测试集
9 K& ?3 T8 _/ R; j4 k' G
y_pred = model.predict(X_test_scaled)
% P) c- u6 \% B) @9 T
N; X7 e$ p6 O9 S( u/ s% e
# 评估模型
5 b. b, r3 }+ x3 t3 D+ y" ~
mse = mean_squared_error(y_test, y_pred)
" x) b- j: ?3 Y. Y6 c% M5 X0 ^4 u
print(f"Mean Squared Error: {mse}")
复制代码
挑战:尝试不同的预处理方法和特征选择
1 v( K8 \( W6 X: t$ A
预处理方法:除了标准化,你还可以尝试归一化(MinMaxScaler)、对数转换等方法,看看它们如何影响模型的性能。
2 q# e; J6 |( O! l" a- |* r
特征选择:可以使用不同的特征选择方法(如SelectKBest, SelectFromModel)来选择最有影响力的特征,这有助于模型专注于最重要的信息,提高预测准确性。
from sklearn.feature_selection import SelectKBest, f_regression
' n1 b0 A2 F- m9 Y4 A0 Z
. o0 S3 D) o6 r) O' ~ c' i+ J& N
# 特征选择
% t0 T5 [! P* D; y+ r3 [
selector = SelectKBest(score_func=f_regression, k=5)
$ W y4 B8 y' o7 }: g1 I i" G
X_train_selected = selector.fit_transform(X_train_scaled, y_train)
: p( k I F7 a$ J% F- q
X_test_selected = selector.transform(X_test_scaled)
; }1 T) u% [ j
" B" g4 i& X* B$ z F
# 使用选择的特征重新训练模型
% b" @: r9 k% \! {
model.fit(X_train_selected, y_train)
8 o! M! g0 U' j) z1 {# m( I2 d, N; d
y_pred_selected = model.predict(X_test_selected)
, n' v/ ~% g& O% l( }
. ^+ b* V$ w5 Y- m* F+ {
# 评估
. v2 r( |0 I; r$ d+ u
mse_selected = mean_squared_error(y_test, y_pred_selected)
3 x/ e, N0 X/ h- J
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