数据集:使用加利福尼亚房价数据集。 ( x$ X# u2 |! O- t3 ~0 z任务:构建一个模型预测加利福尼亚地区的房价。 % ?0 L L3 E& l: f( R挑战:尝试不同的预处理方法(标准化、归一化等)和特征选择技术来改进模型性能。+ I& ~; m0 d# @3 e" p
线性回归是一种预测数值型数据的经典统计方法,它假设目标值和特征之间存在线性关系。在房价预测任务中,我们可以使用线性回归模型来预测基于多个特征(如房屋大小、位置、年龄等)的房价。以下是使用加利福尼亚房价数据集进行房价预测的示例代码,以及如何应用不同的预处理方法和特征选择技术来改进模型性能。 , Z4 w& C2 t- x/ V+ o8 Z$ h" _6 k) d( q1 V0 N( w
加载和预处理数据* H8 C4 |" V3 t% O+ H2 X5 j- f
首先,我们从scikit-learn中加载加利福尼亚房价数据集,并进行基本的数据预处理。
from sklearn.datasets import fetch_california_housing) C/ X! W* J- s# P
% M* Q5 N8 C2 F. B
from sklearn.model_selection import train_test_split2 _% r( `4 G9 ?( Q0 _( ~! X2 ]( Y
$ V& R) n0 L: |' @
from sklearn.preprocessing import StandardScaler
& [* |! _. G# X( ?/ g6 ~
3 T\\" b- Q) E\\" h' s% `) |
from sklearn.linear_model import LinearRegression
\\" C( Q) }! _$ V2 k4 S3 u' R
7 N* [- X5 x# O
from sklearn.metrics import mean_squared_error
2 t |, H W) i
, [4 X! f+ e5 z6 Q; g& n
( j! B+ w# X2 \! N
6 b; u$ j4 y' y# v* H' Y
# 加载数据集
1 ^2 K0 a: \% P$ ~3 M( \( k2 L
2 D! F8 S1 V& _8 d6 P; ^
housing = fetch_california_housing()& k) H; T+ m8 l( x
+ g A- K# U* p0 Y# o$ G
X, y = housing.data, housing.target
' t2 D# ] s; d6 @1 R4 T, E
+ c7 F+ T5 \4 _
, i- @0 l% ?* h\\" A. Q/ r6 Z
: R$ x. {% I5 H {( H
# 划分训练集和测试集, q# D: W: Z9 Z1 }
; r% m9 v* B' g5 j$ m
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
- I7 k J5 w& h# ~
: Z. Y/ K9 z2 z$ U* y
3 r! J3 U8 c+ c) P( _, s6 H
5 H% H! p: \\\" W3 r) V+ d4 ?
# 数据预处理:标准化# C3 G8 T- f3 v' e
7 R; d( E: [+ I! \8 |
scaler = StandardScaler()
8 b0 x# K. [& n' X6 F* a g
% p' E4 I9 @; f2 M
X_train_scaled = scaler.fit_transform(X_train)
$ y- A7 k* N8 i, z; X
\\" v7 D( h. {2 C% \* u\\" F3 X: T* P; L
X_test_scaled = scaler.transform(X_test)
构建和训练线性回归模型
# 创建线性回归模型 $ u6 U, M; m! _9 V G
model = LinearRegression() % W2 d9 ?$ {' C0 E; G6 m; v% y\" @ K
j L\" G) O: y\" a) X0 N$ t
# 训练模型8 X- C2 `0 \7 W ?6 q- X3 z, _2 l2 ^
model.fit(X_train_scaled, y_train) 3 G8 Y0 A) ]: l3 Q: B5 H$ D+ Y
' B+ A. M4 O( b2 V. W
# 预测测试集 $ \7 m* v: _- \* t$ v
y_pred = model.predict(X_test_scaled)* r8 d5 z# P( I$ h. r6 g
$ | D) c4 ?7 Z
# 评估模型 C8 T. i% t1 k G, \) |
mse = mean_squared_error(y_test, y_pred) 1 @6 w/ S- A T; X
print(f"Mean Squared Error: {mse}")
复制代码
挑战:尝试不同的预处理方法和特征选择& y2 F q/ ]- B) C% v
预处理方法:除了标准化,你还可以尝试归一化(MinMaxScaler)、对数转换等方法,看看它们如何影响模型的性能。9 D7 a( M0 J) f. P4 W E
特征选择:可以使用不同的特征选择方法(如SelectKBest, SelectFromModel)来选择最有影响力的特征,这有助于模型专注于最重要的信息,提高预测准确性。
from sklearn.feature_selection import SelectKBest, f_regression2 `0 X1 \0 |% y
8 Q, h# {7 c; A
# 特征选择 4 r9 @# X9 ?2 n' ~
selector = SelectKBest(score_func=f_regression, k=5) 7 K. J0 l) v1 `8 u
X_train_selected = selector.fit_transform(X_train_scaled, y_train)+ Y5 o# a\" I# E) f F
X_test_selected = selector.transform(X_test_scaled) , C- N# c1 P. v
2 q% H1 p4 f; a8 o* {5 f4 N8 v
# 使用选择的特征重新训练模型 \" [7 n+ k; H% O! h! s' L4 b
model.fit(X_train_selected, y_train)/ v# Z/ X: Y9 Q& O
y_pred_selected = model.predict(X_test_selected) \" A$ Y. `/ e( _3 S' f
2 U\" f1 k ~, a* }5 k3 x0 }3 W
# 评估1 ~: z3 t3 w* V7 T
mse_selected = mean_squared_error(y_test, y_pred_selected) 3 E0 d- |9 f# H1 B\" u, M4 N
print(f"Mean Squared Error with selected features: {mse_selected}")