- 在线时间
- 427 小时
- 最后登录
- 2024-10-31
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 6455 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2465
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1057
- 主题
- 1054
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
|
数据集:使用加利福尼亚房价数据集。, s1 v6 V% X* }' d4 f+ ^
任务:构建一个模型预测加利福尼亚地区的房价。: B+ i; ]7 G/ e" ?. Q
挑战:尝试不同的预处理方法(标准化、归一化等)和特征选择技术来改进模型性能。
/ R- Q9 D4 E- g线性回归是一种预测数值型数据的经典统计方法,它假设目标值和特征之间存在线性关系。在房价预测任务中,我们可以使用线性回归模型来预测基于多个特征(如房屋大小、位置、年龄等)的房价。以下是使用加利福尼亚房价数据集进行房价预测的示例代码,以及如何应用不同的预处理方法和特征选择技术来改进模型性能。& _* T: O4 [- [3 l' m, P9 I
; E/ d) t |, y
加载和预处理数据
, u7 D# { q& A/ E7 ]- Y% O首先,我们从scikit-learn中加载加利福尼亚房价数据集,并进行基本的数据预处理。- from sklearn.datasets import fetch_california_housing
- ( C3 J& l2 C: P9 x4 P& c5 s
- ; _. f+ `( z' w
- from sklearn.model_selection import train_test_split2 q5 C/ M. i( X: P5 n# H
- * n/ O/ y8 I3 {\\" |# t
- from sklearn.preprocessing import StandardScaler
- 1 H) t. T) i* z Q7 i: ?/ Q
- & X! d5 o' z M8 \6 g9 K+ u
- from sklearn.linear_model import LinearRegression/ p+ ^* u( ?, g% i3 a
- + q: b/ K7 e4 j; {8 M/ E* C9 m
- from sklearn.metrics import mean_squared_error& V* ]. m$ \2 }3 A2 R3 K
- 2 |5 @8 Y& I+ s. _% ~' q. R' V
-
- ~9 ~2 x, Q ?: `* L
- ( |$ n. F- k\\" V5 H4 j1 i* M5 q
- # 加载数据集
- 4 W G+ m3 R2 c# Q9 Q* m! K
- \\" B1 ?# }6 S0 k# P% C7 d\\" Q9 |! b
- housing = fetch_california_housing()4 f1 ]% r w3 ~2 j8 d+ G/ t) ]
- 0 P' S4 |5 d: y* R/ I- e
- X, y = housing.data, housing.target0 [1 w$ _( P( F( D' t- V0 `$ R
- ( d9 b0 C7 F! |4 R+ g( ^. [+ F
- + B) m5 `0 T) g% U! ]( S4 Q
- 9 V( W+ i: `! c) b0 o$ X
- # 划分训练集和测试集
- # B1 M& [\\" [\\" c$ @
- ! o/ w7 z L0 w! Y+ |
- X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
- \\" H: B G* C8 T$ Y
- : H0 D. R# X3 s# F- M* j' s8 {
- \\" ~/ g( g1 y4 h. J) e
- 0 f' r+ |/ F0 q# |
- # 数据预处理:标准化7 ^9 P7 d: J+ M/ a- O* u k
- ; U* \) V K( O& ?3 L( q
- scaler = StandardScaler()* }8 U! Y! Z8 K+ W2 @% k
- ) t% f3 S `+ I8 M* {2 ?
- X_train_scaled = scaler.fit_transform(X_train)! ~% s1 I\\" u4 w9 d# B' F% D
- # ]! |' W: v% `# ~8 r
- X_test_scaled = scaler.transform(X_test)
构建和训练线性回归模型- # 创建线性回归模型
1 _: a, e4 s6 n* o - model = LinearRegression()& U/ B' ? @% C$ k5 W6 a
- * ^% `, ~- d: P8 \( [
- # 训练模型* v7 E, W) ~( L; S+ k
- model.fit(X_train_scaled, y_train)- v6 K/ s1 h, Z\" I
- 0 `9 _1 E2 x' ~6 h
- # 预测测试集( F* J0 e( q' M0 z+ J3 V
- y_pred = model.predict(X_test_scaled)
9 N: d7 u) ]5 B! D p -
I& s' ]# x6 A% o5 f1 ? - # 评估模型
' ^9 L) G) c9 A' _5 l - mse = mean_squared_error(y_test, y_pred)
# X; q' G' R2 B3 ? - print(f"Mean Squared Error: {mse}")
复制代码 挑战:尝试不同的预处理方法和特征选择- D6 w- }' C1 M/ Y# L8 J
预处理方法:除了标准化,你还可以尝试归一化(MinMaxScaler)、对数转换等方法,看看它们如何影响模型的性能。( a; W1 ]2 g$ F7 E' ^
特征选择:可以使用不同的特征选择方法(如SelectKBest, SelectFromModel)来选择最有影响力的特征,这有助于模型专注于最重要的信息,提高预测准确性。- from sklearn.feature_selection import SelectKBest, f_regression
, f5 ]5 k8 B' b0 Q% g\" K -
& z6 K\" V7 ]1 @8 P - # 特征选择
- b9 S0 Z# _( j6 G `5 t3 I' x - selector = SelectKBest(score_func=f_regression, k=5)
2 O; z( ^; L U* v\" \( ~7 H4 ` - X_train_selected = selector.fit_transform(X_train_scaled, y_train)% j7 {4 N0 \; d9 J- r w& e
- X_test_selected = selector.transform(X_test_scaled)
: e. f0 P' K9 Y: y1 m3 s2 L' e - ' r& |* F! \7 j2 G
- # 使用选择的特征重新训练模型
/ J2 A/ g) G/ K2 d# ^+ n\" b6 Q3 H - model.fit(X_train_selected, y_train)
$ ?% @8 i+ d8 s1 c& d - y_pred_selected = model.predict(X_test_selected). m/ R: ]9 h8 m$ y; g+ G% F6 w
-
E\" ~8 {2 m2 H/ l9 ] - # 评估4 |; Z4 q/ q* N8 K
- mse_selected = mean_squared_error(y_test, y_pred_selected)
6 V% }' @+ X* o2 S5 ] - print(f"Mean Squared Error with selected features: {mse_selected}")
复制代码
3 a' t8 {9 r1 x+ K/ z- ]+ _' J% f3 J |
zan
|