机器学习
1、立项
立项的目的是:明确项目意义,确定项目目标、范围和资源需求,能最大程度的利用所需资源,并规范项目实现流程,使用时间表等。
- 项目的背景(项目的母胎)
- 数据来源
- 数据预处理
- 特征工程 -> 特征处理与特征选择
- 选择模型/算法
- 模型评估
- 模型 (上线/线下) 部署
2、功能实现
区分项目任务,一般总的分为三部分:1、数据预处理、2、特征选择与处理、3、模型应用
-
数据预处理
# 数据预处理一般处理的都是数据中的 "脏数据","脏数据"就是我们数据中的 (缺失值、重复值、异常值、某些字段信息不合法等)。# 1、 缺失值的处理,一般使用填充,可以根据数据信息的类型,选择不同的填充方式。 # | 可以使用pandas,判断是否有缺失值,一般判断缺失值的方法为: ( pd.isnull() | pd.isna() ),我们可以对其进行求和,或布尔值观察 # | 常见的填充方式: mode -> 众数填充,median -> 中位数填充,mean -> 均值填充等。# 2、重复值处理,一般采用(删除 或 去重): # | 判断是否有重复值可以使用( pandas中的duplicate() ),会更直观的查看到数据表中重复值得数量。 # | 删除重复值行,使用pd.drop_duplicates(keep="first",inplace=True,subset),可以删除重复行。 # | 其中参数inplace决定是否在原表上进行操作,False则代表不在原表操作,会返回一个新的DataFrame。 # | keep参数决定了重复值得保留方法,可传入三个值:"first(第一条) | last(最后一条) | False(不保留)" # | subset参数决定了重复列的判定方式,这让我们有机会利用多列作为判定重复的依据。参数接受的是一个字段列表# 3、异常值(离群值)观测与处理: # | 异常值的观测一般使用箱线图(boxplot),可以很清晰的将异常值展示出来.如 (大于上边界) 或 (小于下边界) 的值。 # | 异常值处理1:使用IQR四分位间距检测 # | 通过计算出当前列的上四分位数与下四分位分别加上或减去正常值,从而得到一个上边界值或下边界值,用来分别检测异常值。 # | 上四分位数:q3 = df['column'].quantila(0.75) # | 下四分位数:q1 = df['column'].quantila(0.25) # | 正常值,IQR : IQR = q3 - q1 # | 然后计算上下边界(boundary) # | 上边界:upper_boundary = q3 + IQR * 1.5 # | 下边界:lower_boundary = q1 - IQR * 1.5 # | 再通过计算出的上下边界值,获得异常值,并处理。 # | error = (df['column'] > upper_boundary) | (df['column'] < lower_boundary) # | df.loc[error, column] = df[column].median() # 中位数填充# 4、非法字段的检测处理:需要根据字段信息校验,并将字符转为所希望合法的字符,此处暂时略过...
# 关于异常值补充:# 1、删除 : 如果想找出一般的规律,而且异常值也不太多,可以考虑删除。因为异常值可能会影响结论。很多节目中计算选手最后得分往往去掉一个最高分,去掉一个最低分,可能就是这个道理。比如我们现在研究就是要塞等级为15级的玩家的道具消耗特征,这时候异常值显然会拉高整体的水平,影响判断,所以可以考虑删除,我们要了解大多数玩家。# 2、放任不管: 因为异常值代表的也是真实发生的事件,背后是具体的行为。有些值即使异常,也不会影响模型。比如我们研究的关系,想做回归分析,也就是看道具消耗和充值金额的因果关系。我们能够很清楚的看到刚才找到的的4个异常值虽然他们游离于群体之外,但是在对进行拟合的时候并没有使模型造成太大偏差。所以这种异常值对我们的模型来说很合理。# 3、视为缺失值填充(就是上方的填充):。因为贸然删除数据可能会损失信息,而如果放任不管可能又影响我们的模型,所以可以考虑用均值、临近值进行填充。
-
特征选择
特征选择也可以称之为 (特征工程) ,我们需要在其中对比特征的相关性,选择性的降低特征维度,对特征进行一系列的处理,如:标准化、归一化等,与标签 (目标) 规范,为防止模型过于复杂从而引起过拟合,我们需要将相关性较弱的特征选择型删除,从而达到节省资源
sklearn.metrics 评估指标,所有的评估方法都在该模块中 accuracy_score(y_true, y_pred)变量:可修改、自定义 常量:不可修改、不可自定义1、Accuracy 准确率 : 预测的正确样本/总样本数 模型自带的score底层是调用的 sklearn.metrics 内的 accuracy_score,因此他们结果相同。 from sklearn.metrics import accuracy_score # 方法的导入 缺点: 对当前模型进行评估时,如果对数据的类别/标签样本没有处理均衡,导致最终的Acc可能依然会很高,结果也不是预期准确的。所以acc并不是唯一评估指标。 核心:判断 预测值 与 真实值 是否相等(或是说比例) 2、精确率(Precision) :表示预测为正样本的实例中真正为正样本的比例 3、召回率(Recall)-*:表示真正为正样本的实例中被预测为正样本的比例。 4、F1分数(F1-score):使用了精确率与召回率,最终得出指标 F1-score = (2*0.769*0.556)/(0.769+0.556)classification_report # 分类报告,包含上方四种评估指标混淆矩阵:confusion_matrix线图评估 1、roc 曲线图 2、aoc 面积
月亮数据集
1、导入数据make_moons
n_samples= 1000 # 数据量
noise = 0.05 # 噪音X,y = make_moons(n_samples= 1000, noise = 0.05)
# 转换DataFrame类型 指定 columns
# 拼接 concat -> 拼接需要指定拼接列或行的维度 axisvalue_counts() -> 返回的元素值,可以直接来接收例如:X1, X2 = value_counts( ... ) # 前提是返回的元素与接收的元素对等取反 ~ 符号,可以将条件取反 True 变 False 等,灵活运用学习曲线:方法在 model_selection 中需要的参数有,模型,X,y模型传入使用的模型,X与y传入训练数据最终返回值是训练大小,训练成绩,测试成绩-------------------------------------------------------------------------------------------------------------------
任务一1、数据的读取1)本地读取使用 pandas 读取尾缀:.data .txt .csv认识数据:打印(前几行、后几行、数据总数、数据特征总数(-1)...)2)sklern 读取鸢尾花数据集(load_iris)、红酒数据集(load_wine)、月亮标签数据集(make_moons)、乳腺癌数据集、糖尿病数据集2、数据处理缺失值(fillna)、重复值(DROP)、异常值(IQR),在处理这些脏数据时,要通过观测数据本身来选择填充、删除等方法。3、特征选择与处理选择的相关性较强的特征 | 处理的特征和标签不规范 标准化缩放:将值缩放到均值为0,方差为1的范围内归一化缩放:范围在[0,1]之间3、模型算法选择模型与网格优化网格优化(优化模型)estimator 估计器/分类器best 最好的评估指标:sklearn.metrics 准确率、精确率、召回率、f1分数、混淆矩阵、分类报告、roc曲线、auc数值/面积