在线时间 480 小时 最后登录 2026-6-1 注册时间 2023-7-11 听众数 4 收听数 0 能力 0 分 体力 7823 点 威望 0 点 阅读权限 255 积分 2934 相册 0 日志 0 记录 0 帖子 1174 主题 1189 精华 0 分享 0 好友 1
该用户从未签到
数据集:使用加利福尼亚房价数据集。
( B% s4 E9 x. Y1 s- X/ k* j W 任务:构建一个模型预测加利福尼亚地区的房价。
5 f r/ h& t j% _! B+ C4 l n y 挑战:尝试不同的预处理方法(标准化、归一化等)和特征选择技术来改进模型性能。; ^7 M( J/ I& w' g) R
线性回归是一种预测数值型数据的经典统计方法,它假设目标值和特征之间存在线性关系。在房价预测任务中,我们可以使用线性回归模型来预测基于多个特征(如房屋大小、位置、年龄等)的房价。以下是使用加利福尼亚房价数据集进行房价预测的示例代码,以及如何应用不同的预处理方法和特征选择技术来改进模型性能。/ g1 U# C$ h, p C
, Y; U, c0 k! K6 }* V" g5 |' K2 k 加载和预处理数据
, A P' `- e% v+ T* H 首先,我们从scikit-learn中加载加利福尼亚房价数据集,并进行基本的数据预处理。from sklearn.datasets import fetch_california_housing
2 z: G5 T8 D2 C 4 k% \: s- B# D9 U- i\\" W2 Y
from sklearn.model_selection import train_test_split: k/ H+ g! w& }' y* @, O3 C
1 W8 F; x: v L8 [
from sklearn.preprocessing import StandardScaler. R1 r* b' G1 s$ B8 c& e* @# E
/ I- p9 K* V\\" q* l9 N( M
from sklearn.linear_model import LinearRegression3 G% C: c0 z0 E& v
_% C* ] w2 Z' g' L* y# y. m0 R4 o W
from sklearn.metrics import mean_squared_error
. Z& O& l* d. Z, J$ p * k2 g2 m1 o\\" `3 |$ h' W
8 I D8 d( O\\" a. v
8 y: N. M7 d; q4 o! Z# { # 加载数据集
7 ]; k% x6 y* T, B
; A1 e. t) o6 P- K. X housing = fetch_california_housing()$ I) M9 d E4 [. d0 R
\\" d3 _0 G8 j( S2 z7 ~( E X, y = housing.data, housing.target* b0 B+ V( L9 B
, V4 F M8 C$ m* h. |. ?* ~& m 0 k; s: U\\" h9 q& S( i2 s( {
8 R/ M\\" y% ?1 |3 d. O( L
# 划分训练集和测试集
9 [' K1 _1 H$ U- N3 L7 y+ t8 v# Z / K$ v% A! X# {; `3 U% p; y- ]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
9 _% S. s1 i% b7 K( F' {; A, z
% f( j% k+ z) f7 X8 b; k - A* @, k\\" C* H
, T( i\\" o/ k. K! [: W; ]
# 数据预处理:标准化6 V6 o% h% k1 C: [% I4 Y
, F( ^/ v; ^2 ^7 d\\" L, i) Z- M; p
scaler = StandardScaler()
. Q, D/ j$ V) V $ h$ [! ^6 |( I! ~( p& L
X_train_scaled = scaler.fit_transform(X_train)
1 C7 N% \9 r3 |\\" m4 O. { [ # r2 I& X1 G* C, d# K* P
X_test_scaled = scaler.transform(X_test)
构建和训练线性回归模型 # 创建线性回归模型
! h Z8 S& k7 j+ o; U8 E model = LinearRegression()- r6 ^ K. |- o2 X6 R3 d6 | b# D# H
& Y4 d8 S5 Y- F5 P5 e& i2 R' K
# 训练模型; h4 ^1 o8 @( K% V, N3 U1 ]
model.fit(X_train_scaled, y_train): q, \\" E; _2 |/ f& p; w4 A
' _5 x$ p2 D\" _\" } # 预测测试集
a0 H1 c' t! v+ U y_pred = model.predict(X_test_scaled)
; D: ^2 W: O8 c$ C; \2 K ' f. a\" {0 E2 b3 G
# 评估模型: K8 s c9 k/ N3 Q* g
mse = mean_squared_error(y_test, y_pred)
7 f\" h% l1 {$ `- v2 y print(f"Mean Squared Error: {mse}") 复制代码 挑战:尝试不同的预处理方法和特征选择3 z7 a8 J& t _2 q- u5 @+ C
预处理方法:除了标准化,你还可以尝试归一化(MinMaxScaler)、对数转换等方法,看看它们如何影响模型的性能。
' _6 R+ s7 }6 r m, N S7 g9 { 特征选择:可以使用不同的特征选择方法(如SelectKBest, SelectFromModel)来选择最有影响力的特征,这有助于模型专注于最重要的信息,提高预测准确性。from sklearn.feature_selection import SelectKBest, f_regression
x; s) S# F3 o/ @6 j: y ; K7 _7 a1 l! ~3 {2 V
# 特征选择
5 g6 A\" u# F2 g t6 N3 {% Q: @( W selector = SelectKBest(score_func=f_regression, k=5)
\" u5 h$ Z2 U3 U( x, B X_train_selected = selector.fit_transform(X_train_scaled, y_train)
& s W( O3 r- q7 M! \$ l, r X_test_selected = selector.transform(X_test_scaled)
' O) Z\" T( s: i 9 T5 z; O' k& H\" Z* F2 u
# 使用选择的特征重新训练模型
( y; r# R) q8 G7 x x6 c model.fit(X_train_selected, y_train). n* U& u f/ y
y_pred_selected = model.predict(X_test_selected)
* m7 s2 W5 M# n( O7 T2 ~\" t
# s' a7 x/ Z8 G$ q) G+ b* b9 f # 评估
. @1 x) q. z; N( z6 _1 y: Y7 ? mse_selected = mean_squared_error(y_test, y_pred_selected)1 x- l/ _; e1 o$ |
print(f"Mean Squared Error with selected features: {mse_selected}") 复制代码 1 u1 V1 X& f- }/ T& ]7 g1 j
zan