【Python使用】嘿马python数据分析教程第6篇:Wrapper【附代码文档】

举报
程序员一诺python 发表于 2025/08/13 22:39:18 2025/08/13
【摘要】 1.Excel使用与全渠道业务分析包括groupby操作、不同类别App价格分布。2. Pandas基础涵盖列表与整数间运算、imdb_score列操作(加法、乘法、取余、比较操作)、通用函数加法实现。3. DataFrame基本操作包括skipna聚合行为、内存占用查看与优化(astype转换、类别化处理)。4. 数据分析入门涵盖数据类型查看、内存优化、对象列独立值统计、分类

🏆🏆🏆教程全知识点简介:1.Excel使用与全渠道业务分析包括groupby操作、不同类别App价格分布。2. Pandas基础涵盖列表与整数间运算、imdb_score列操作(加法、乘法、取余、比较操作)、通用函数加法实现。3. DataFrame基本操作包括skipna聚合行为、内存占用查看与优化(astype转换、类别化处理)。4. 数据分析入门涵盖数据类型查看、内存优化、对象列独立值统计、分类处理。5. 选取数据子集与布尔索引包括movie数据集读取、条件构造。6. 分组聚合、过滤与转换涉及航班数据排序、列重命名、城市间航班统计、NumPy sort提速、DataFrame构造对比。7. 数据追加与修改包含loc操作、字典赋值、append方式、性能测试。8. SQL数据读取涵盖SQLAlchemy引擎创建、read_sql_table、read_sql_query使用、歌曲时长统计、顾客消费统计。9. 时间序列分析包括hdf5文件读取、crime数据集处理、DatetimeIndex操作、时间切片、按时间与类别分组、内存优化、多层索引选择。10. 可视化涉及Matplotlib、Pandas、Seaborn绘图、航班延迟图表、时间分布图、机场统计图、散点图、距离分组、缺失值插补。11. 特征与目标变量提取、模型初始化与拟合。


📚📚👉👉👉   https://gitee.com/yinuo112/Backend/blob/master/Python/嘿马python数据分析教程/note.md


🎯🎯🎯全教程总目录


🚀🚀🚀本篇主要内容

Wrapper

递归特征消除 (Recursive Feature Elimination)

递归消除特征法使用一个基模型来进行多轮训练,每轮训练后,移除若干权值系数的特征,再基于新的特征集进行下一轮训练。

对特征含有权重的预测模型(例如,线性模型对应参数coefficients),RFE通过递归减少考察的特征集规模来选择特征。首先,预测模型在原始特征上训练,每个特征指定一个权重。之后,那些拥有最小绝对值权重的特征被踢出特征集。如此往复递归,直至剩余的特征数量达到所需的特征数量。

RFECV 通过交叉验证的方式执行RFE,以此来选择最佳数量的特征:对于一个数量为d的feature的集合,他的所有的子集的个数是2的d次方减1(包含空集)。指定一个外部的学习算法,比如SVM之类的。通过该算法计算所有子集的validation error。选择error最小的那个子集作为所挑选的特征。

In [29]:

from sklearn.feature_selection import RFE
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris

rf = RandomForestClassifier()
iris=load_iris()
X,y=iris.data,iris.target
rfe = RFE(estimator=rf, n_features_to_select=3)
X_rfe = rfe.fit_transform(X,y)
X_rfe.shape

Out[29]:

(150, 3)

In [30]:

X_rfe[:5,:]

Out[30]:

array([[5.1, 1.4, 0.2],
       [4.9, 1.4, 0.2],
       [4.7, 1.3, 0.2],
       [4.6, 1.5, 0.2],
       [5. , 1.4, 0.2]])

In [ ]:

#### Embedded

使用SelectFromModel选择特征 (Feature selection using SelectFromModel)

基于L1的特征选择 (L1-based feature selection)

使用L1范数作为惩罚项的线性模型(Linear models)会得到稀疏解:大部分特征对应的系数为0。当你希望减少特征的维度以用于其它分类器时,可以通过 feature_selection.SelectFromModel 来选择不为0的系数。

特别指出,常用于此目的的稀疏预测模型有 linear_model.Lasso(回归), linear_model.LogisticRegression 和 svm.LinearSVC(分类)

In [31]:

from sklearn.feature_selection import SelectFromModel
from sklearn.svm import LinearSVC
lsvc = LinearSVC(C=0.01, penalty="l1", dual=False).fit(X,y)
model = SelectFromModel(lsvc, prefit=True)
X_embed = model.transform(X)
X_embed.shape

Out[31]:

(150, 3)

In [32]:

X_embed[:5,:]

Out[32]:

array([[5.1, 3.5, 1.4],
       [4.9, 3. , 1.4],
       [4.7, 3.2, 1.3],
       [4.6, 3.1, 1.5],
       [5. , 3.6, 1.4]])

工作中的套路

模型上线后可能会遇到的问题:

  • 模型效果不好
  • 训练集效果好,跨时间测试效果不好
  • 跨时间测试效果也好,上线之后效果不好
  • 上线之后效果还好,几周之后分数分布开始下滑
  • 一两个月内都比较稳定,突然分数分布骤降
  • 没有明显问题,但模型每个月逐步失效

考虑一下业务所需要的变量是什么。

  • 变量必须对模型有贡献,也就是说必须能对客群加以区分
  • 逻辑回归要求变量之间线性无关
  • 逻辑回归评分卡也希望变量呈现单调趋势 (有一部分也是业务原因,但从模型角度来看,单调变量未必一定比有转折的变量好)
  • 客群在每个变量上的分布稳定,分布迁移无可避免,但不能波动太大

从上述方法中找到最贴合当前使用场景的几种方法。

In [29]:

import pandas as pd
import numpy as np
df_train = pd.read_csv('train.csv')
df_train.head()

Out[29]:

PassengerId label Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
0 1 0 3 Braund, Mr. Owen Harris male 22.0 1 0 A/5 21171 7.2500 NaN S
1 2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 0 PC 17599 71.2833 C85 C
2 3 1 3 Heikkinen, Miss. Laina female 26.0 0 0 STON/O2. 3101282 7.9250 NaN S
3 4 1 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 0 113803 53.1000 C123 S
4 5 0 3 Allen, Mr. William Henry male 35.0 0 0 373450 8.0500 NaN S

1)变量重要性

[aiofiles 文档]

  • 卡方检验
  • 模型筛选

2)共线性

  • 相关系数 COR

在做很多基于空间划分思想的模型的时候,我们必须关注变量之间的相关性。单独看两个变量的时候我们会使用皮尔逊相关系数。

In [6]:

df_train.corr()

[json 文档]

Out[6]:

PassengerId label Pclass Age SibSp Parch Fare
PassengerId 1.000000 -0.005007 -0.035144 0.036847 -0.057527 -0.001652 0.012658
label -0.005007 1.000000 -0.338481 -0.077221 -0.035322 0.081629 0.257307
Pclass -0.035144 -0.338481 1.000000 -0.369226 0.083081 0.018443 -0.549500
Age 0.036847 -0.077221 -0.369226 1.000000 -0.308247 -0.189119 0.096067
SibSp -0.057527 -0.035322 0.083081 -0.308247 1.000000 0.414838 0.159651
Parch -0.001652 0.081629 0.018443 -0.189119 0.414838 1.000000 0.216225
Fare 0.012658 0.257307 -0.549500 0.096067 0.159651 0.216225 1.000000

3)单调性

  • bivar图

[sys 文档]

[Python 语言参考]

# 等频切分
df_train.loc[:,'fare_qcut'] = pd.qcut(df_train['Fare'], 10)
df_train.head()
df_train = df_train.sort_values('Fare')
alist = list(set(df_train['fare_qcut']))
badrate = {}
for x in alist:

    a = df_train[df_train.fare_qcut == x]

    bad = a[a.label == 1]['label'].count()
    good = a[a.label == 0]['label'].count()

    badrate[x] = bad/(bad+good)
f = zip(badrate.keys(),badrate.values())
f = sorted(f,key = lambda x : x[1],reverse = True )
badrate = pd.DataFrame(f)
badrate.columns = pd.Series(['cut','badrate'])
badrate = badrate.sort_values('cut')
print(badrate)
badrate.plot('cut','badrate')


                 cut   badrate
9     (-0.001, 7.55]  0.141304
6      (7.55, 7.854]  0.298851
8      (7.854, 8.05]  0.179245
7       (8.05, 10.5]  0.230769
3     (10.5, 14.454]  0.428571
4   (14.454, 21.679]  0.420455
2     (21.679, 27.0]  0.516854
5     (27.0, 39.688]  0.373626
1   (39.688, 77.958]  0.528090
0  (77.958, 512.329]  0.758621

[python-dateutil 文档]

[Bottle 文档]

Out:

[fabric 文档]

<matplotlib.axes._subplots.AxesSubplot at 0x168263d8cf8>
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。