




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课程安排及目标 目录第 1 章 构建机器学习系统31.1 机器学习系统架构31.2 用 Scikit-learn 搭建机器学习系统51.2.1 Sklearn 安装5第 2 章 机器学习常用算法62.1 常用算法概述62.2 机器学习常用算法及优缺点62.3 解决过拟合问题82.4 解决过拟合、欠拟合的方法小结8第 3 章 数据探索与预处理93.1 数据探索93.2 数据预处理实例143.2.1 预处理缺失值143.2.2 处理类别数据163.2.3 将数据集随机划分为训练与测试集203.2.4 将特征的值缩放到相同区间203.2.5 离散化连续值213.2.6 选择有意义的特征243.2.7
2、 特征组合283.2.8 处理 Excel283.3 正则化283.3.1 正则化简介283.3.2 机器学习中常用的两种正则化策略303.3.3.正则化的主要作用313.3.4 逻辑回归中使用正则化实例分析34第 4 章 Sklearn 预测客户流失374.1 导入数据集37日期 概要 目标 11.08 第 1 章:构建机器学习系统 第 2 章:常用机器学习算法 1、理解机器学习系统架构 2、了解机器学习各种算法 第 3 章:数据探索及预处理 第 4 章:机器学习实例 1、理解探索数据方法 2、掌握多种数据预处理方法 3、理解如何用机器学习解决实际问题 4.2 预处理数据集384.3 使用交
3、叉验证方法394.4 训练模型404.5 精确率和召回率414.6 ROC & AUC434.7 特征分析45第 1 章 构建机器学习系统构建机器学习系统,根据业务需求和使用工具的不同,可能会有些区别。不过主要流程应该差别不大,基本包括数据抽取、数据探索、数据处理、建立模型、训练模型、评估模型、优化模型、部署模型等阶段,在构建系统前,我们需要考虑系统的扩展性、与其他系统的整合、系统升级及处理方式等。1.1 机器学习系统架构Spark 发展非常快,到我们着手编写本书时,Spark 已升级为 2.1 版,这 2.0 以后,Spark 大大增强了数据流水线的内容,数据流水线的思路与 SKLearn
4、非常相似,我想这种思路或许是未来的一个趋势,使机器学习的流程标准化、规范化、流程化,很多原来需要自己编写代码都有现成的模块或函数,模型评估、调优这些任务也可实现了更高的封装,这大大降低机器学习门槛。数据探索与预处理训练及测试算法或建模收集数据输入数据评估训练数据模型训练数据探索与预处理数据集合模型测试数据评估及 优化测试模型部署图 1-1 机器学习系统的架构图其中数据处理、建模训练,我们可以进行组装成流水线方式,对模型评估及优化可以采用自动化方式。特征工程数据清理数据转换补充规范数据1.2 用 Scikit-learn 搭建机器学习系统自 2007 年发布以来,Scikit-learn 已经成
5、为 Python 重要的机器学习库了。Scikit-Learn 简称 Sklearn,支持包括分类、回归、降维和聚类四大机器学习算法。还包含了特征提取、数据处理和模型评估三大模块。Sklearn 是 Scipy 的扩展,建立在 NumPy 和 matplotlib 库的基础上。利用这几大模块的优势,可以大大提高机器学习的效率。Sklearn 拥有着完善的文档,上手容易,具有着丰富的 API,在学术界颇受欢迎。Sklearn 已经封装了大量的机器学习算法,同时 Sklearn 内置了大量数据集,节省了获取和整理数据集的时间1.2.1 Sklearn 安装推荐使用 Anaconda 科学计算环境,
6、里面已经内置了 NumPy、SciPy、sklearn 等模块,直接可用。或者使用 conda 进行包管理。当然也可使用 pip 安装,在安装前,需要先安装如下依赖库:Python3.6 NumPy SciPy安装以后,我们可以参考安装的版本。import sklearn sklearn. version 0.18.1 conda install scikit-learn 第 2 章机器学习常用算法2.1常用算法概述2.2机器学习常用算法及优缺点算法核心思想优点缺点图示决策树信息增益为当前最优特征的选择依据。容易解释非参数型容易过拟合可能或陷于局部最小值中回归利用最小二乘法求损失函数的最优解简
7、单快速容易欠拟合一般准确度不太高KNN利用欧氏或马氏距离来得到与预测点最近k 个点,以这 k 个点中出现频率高的类别为预测点的类别。思想简单,理论成熟;可用于非线性分类;对 outlier 不敏感计算量大;样本不平衡问题朴素贝叶斯预测点的类别依据其在不同类中概率来确定快速、易于训练;稳 定 的 分 类 效率;适合于多分类特征相关较大时不适合;对数据的表达方式较敏感(离散、连续、极大(小)等SVM利用拉格朗日理论求超平面,对线性不可分采用核函数使之变成线性可分。低泛化误差; 容易解释对参数和核函数的选择比较敏感关联分析(Apriori)根据频繁项集推导关联规则易实现对大批数据可能较慢推荐算法(协
8、同过滤)根据用户与其他客户的相似度,向其推荐未购买的物品。大部分场景中能够产生足够好的结果冷启动问题; 需要标准化产品集成学习(Adaboost)基于错误提升服务器性能低泛化误差; 分类准确率较高对outlier 比较敏感聚类找出使平方误差函数值最小的k 个划分简单易实现可能收敛到局部最小值;在大数据集上收敛较慢神经网络受生物神经网络启发而构建的算法模型。分 类 的 准 确 度高;并行分布处理能力强需要大量的参数; 运算成本较高深度学习更大、更复杂的神经网络在 非 线 性 可 分问 题 上 表 现 优秀较难训练较难解释2.3解决过拟合问题但值得注意的是,模型并不是误差越小就一定越好,因为如果仅
9、仅基于误差,我们可能会得到一个过拟合(Overfitting)的模型;但是如果不考虑误差,我们可能会得到一个欠拟合(Underfitting)的模型,用图像来说的话大致可以这样理解: 如果模型十分简单,往往会欠拟合,对于训练数据和测试数据的误差都会很大; 但如果模型太过于复杂,往往会过拟合,那么训练数据的误差可能相当小,但是测试数据的误差会增大。所以需要“驰张有度”,找到最好的那个平衡点。 如果出现过拟合或欠拟合,有哪些解决方法呢? 1、对于欠拟合,一般可考虑提高数据质量、规范特征、增加新特征或训练数据量等方法;采用交叉验证及网格搜索参数等方法调优超参数(不是通过算法本身学习出来的参数,如迭代
10、步数、树高度、步长等);采用其它算法如集成算法等等。 2、对于过拟合问题,可以考虑引入正则化,正则化指修改算法,使其降低泛化误差(而非降低训练误差);对于维数较大的情况,采用 PCA 降维也是选项之一。 2.4 解决过拟合、欠拟合的方法小结 在模型训练过程中,泛化误差不会随着模型复杂度趋于 0,相反它一般呈现U 型曲线,但训练误差一般训练复杂度增强而变小,直至趋于 0。具体关系我们可以参考下图: 第 3 章 数据探索与预处理本章过实例说明如何进行数据探索及数据预处理。所有方法包括 pandas 及 skilearn 等。数据探索和预处理是提升 数据质量的重要措施,如果没有好的数据质量,就很难保
11、证模型质量。如何探索?探索哪些方面?这里我们主要从数据概览、数据质量、特征关系等方面进行。在数据探索阶段可能会发现很多与数据质量有关的问题,如发现缺失值、错误数据、孤立点、分布不规则、不规范数据、特征质量等问题,针对这些问题,如何处理?这就是涉及数据预处理的内容。3.1 数据探索(1)数据概览import pandas as pd catering_sale=rC:Userslenovodatacatering_sale.csv data=pd.read_csv(catering_sale,index_col=日期,encoding=gbk) #查看数据集前几行样本 print(data.he
12、ad(5) des=data.describe() #查看数据统计信息 运行结果:销量日期2015/3/12015/2/282015/2/272015/2/262015/2/2551.02618.22608.42651.93442.1销量countmean std min 25%50%75%max199.0000002756.929347752.53136922.0000002452.8500002655.9000003028.4500009106.440000(2)查看缺省值打印结果销量2dtype: int64(3)查看是否存在奇异数据 plt.figure() #画箱线图 bp = da
13、ta.boxplot(return_type=dict) # flies常值的标签 x = bpfliers0.get_xdata() y = bpfliers0.get_ydata() y.sort() #用 annotate 添加注释for i in range(len(x): plt.annotate(yi, xy = (xi,yi), xytext=(xi+0.1-0.8/(yi-yi-1),yi)#查看各列含空值或 NaN 值的总数 data.isnull().sum() print(des) 图形显示如果需要过滤异常值,可以通过以下方式:(4)特征分布分析运行结果:import p
14、andas as pd import seaborn as sns import matplotlib.pyplot as plt data1=pd.read_csv(rC:Userslenovodatahour.csv,header=0) sns.set(style=whitegrid,context=notebook) cols=temp,atemp,label sns.pairplot(data1cols,size=2.5) plt.show() data = data(data销量 400)&(data销量 , connectionstyle=arc3,rad=.2),fontprop
15、erties=myfont) #添加注释,即 85%处的标记。这里包括了指定箭头样式。 plt.ylabel(盈利(比例),fontproperties=myfont) plt.show() 3.2 数据预处理实例3.2.1 预处理缺失值(1)数据生成运行结果为:(2)查看缺失数据查看各列缺失数据个数AB C D0011dtype: int64由此可知,C,D 两列各有一个缺失或 NaN 数据。(3)删除含缺失数据的特征或样本#删除含缺失值的样本(或记录)或特征,这是删除 df 副本df.dropna() #删除含缺失值的列df.dropna(axis=1) df.isnull().sum()
16、 import pandas as pd from io import StringIO csv_data = A,B,C,D 1.0,2.0,3.0,4.0 5.0,6.0,8.0 10.0,11.0,12.0, #StringIO 以字符串的形式读取数据,并转换为 dataframe 的格式df = pd.read_csv(StringIO(csv_data) df (4)填充缺失值【说明】strategy 还可以是:median,most_frequent这里 Imputer 是 sklearn 中的转换器类,主要用于数据转换。这些类中常用方法是 fit 和transform。fit 用
17、于参数识别并构建相应数据的补齐模型,而 transform 方法则是根据 fit 构建的模型进行缺失数据的补齐。Imputer 方法创建一个预处理对象,其中 strategy 为默认缺失值的字符串,默认为 NaN;示例中选择缺失值替换方法是均值(默认),还可以选择使用中位数和众数进行替换,即 strategy 值设置为 median 或 most_frequent;后面的参数 axis 用来设置输入的轴,默认值为 0,即使用列做计算逻辑。然后使用预处理对象的 fit_transform 方法对 df(数据框对象)进行处理, 该方法是将 fit 和 transform 组合起来使用。(5)用前后
18、数据填充缺失值运行结果# 用后面的值替换缺失值df.fillna(method=backfill) #把缺失值填充为 0 df.fillna(0) #把缺失值填充为对应列的平均值 from sklearn.preprocessing import Imputer imr = Imputer(missing_values=NaN, strategy=mean, axis=0) imr = imr.fit(df) imputed_data = imr.transform(df.values) imputed_data #只删除所有列都是缺失值的行df.dropna(how=all) # 保留至少
19、4 个为非缺失值的记录df.dropna(thresh=4) #删除指定列行含缺失值的行df.dropna(subset=C) 运行结果(6)不同列的缺失值,用不同值填充运行结果3.2.2 处理类别数据类别数据分为标称特征和有序特征,有序特征指类别的值是有序的或可以排序的,如体恤衫的尺寸:XLLM。而标称特征是不具备排序的特性,如体恤衫的颜色,对颜色进行大小比较是不合常理的。一般类标(分类标签)采用标称特征。(1)生成数据import pandas as pd df = pd.DataFrame( green, M, 10.1, a, red, L, 13.5, b, # 用不同值替换不同列的
20、缺失值df.fillna(C: 4, D: 3.2) # 用后面的值替代缺失值,限制每列只能替代一个缺失值df.fillna(method=bfill, limit=1) #用前面的值替换缺失值df.fillna(method=pad) (2)有序特征的映射这里 size 特征为有序特征,对该特征可以采用有序数字化处理。如果我们想还原, 可以采用逆对应或逆字典 inv_size_mapping size_mapping.items()= v: k for k, v ininv_size_mapping = v: k for k, v in size_mapping.items() #inv_s
21、ize_mapping dfsize.map(inv_size_mapping) df #构建一个对应关系size_mapping = XL: 3, L: 2, M: 1 dfsize = dfsize.map(size_mapping) df blue, XL, 15.3, a) df.columns = color, size, price, classlabel df (3)标签的转换a: 0, b: 1运行结果此外,也可以用 sklearn 中的 LabelEncoder 类将字符串类标转换为整数。运行结果为array(0, 1, 0, dtype=int64)(4)标称特征的独热编码
22、(one-hot)可以利用有序特征一般转换为整数,具体可采用 sklearn 中的 LabelEncoder 类将字符串类标转换为整数,示例代码如下:from sklearn.preprocessing import LabelEncoder #获取对应特征的值 from sklearn.preprocessing import LabelEncoder class_le = LabelEncoder() y = class_le.fit_transform(dfclasslabel.values) y #在对应列进行转换 dfclasslabel = dfclasslabel.map(cla
23、ss_mapping) df #找出类标签列所有不同类别,然后索引化import numpy as np class_mapping = label:idx for idx,label in enumerate(np.unique(dfclasslabel) class_mapping 运行结果array(1, 1, 10.1,2, 2, 13.5,0, 3, 15.3, dtype=object)如果把标称特征转换为整数,算法将假定 gree 大于 blue,red 大于 gree,虽然算法这一假设不很合理,而且能够生成有用的结果,然而,这个结果可能不是最优的。如何生成更好或更合理的结果?这
24、里就要引入独热编码(one-hot encoding)技术,这种技术的理念就是创建一个新的虚拟特征,该虚拟特征的列数就是类别个数,其值为二进制, 每行只有一个 1,其他都是 0,值为 1 的对应该类别。如将 color 特征,共有 3 种类别,所以将该转换为三个新的特征:blue、gree 和 red, 如果是 blue,新特征就是1,0,0,如果是 gree,新特征就是0,1,0.独热编码可用 sklearn.preprocessing 中的 OneHotEncoder 类来实现,具体代码如下:运行结果:array(0. ,0. ,1. ,1. ,0. ,0. ,0. ,1. ,0. ,1.
25、 ,10.1,2. ,13.5,3. ,15.3)这种方法先把字符转换为整数,然后把整数转换为虚拟特征,是否有更简单的方法?一步就实现呢?采用 pandas 的 get_dummies 方法就可以,它将把字符串直接转换为独热编码。以下为具体代码:运行结果pd.get_dummies(dfprice, color, size) from sklearn.preprocessing import OneHotEncoder #初始化 OneHotEncoder 需指明转换特征所在的位置,或指明采用非稀疏矩阵格式ohe = OneHotEncoder(categorical_features=0,s
26、parse=False) ohe.fit_transform(X) X = dfcolor, size, price.values color_le = LabelEncoder() #对X 的第一列进行转换 X:, 0 = color_le.fit_transform(X:, 0) X 3.2.3 将数据集随机划分为训练与测试集(1)获取数据集这是是对在意大利同一地区生产的三种不同品种的酒,做大量分析所得出的数据。这些数据包括了三种酒中 13 种不同成分的数量。共有 178 记录或样本。(2)对数据集进行随机划分3.2.4 将特征的值缩放到相同区间特征缩放是机器学习中常用方法,除少数算法(如
27、决策树、随机森林)无需缩放外,大多算法可以通过缩放使其性能更佳。缩放的方法大致有两种,归一化(normalization)和标准化(standardization)。归一化把特征值缩放到一个较小区间,如0,1或-1,1等,最大-最小缩放就是一个例子。xi xminxi =xmax xmin通过标准化我们可以使特征均值为 0,方差为 1 或某个参数,使其符合正态分布。标准化方法保持了奇异值的有用信息,且降低算法受这些值的影响。xi xxi =x其中x、x分别是样本某特征列的均值和标准差。以下是用 sklearn.preprocessing 的类来实现。#对训练集、测试集进行归一化 from sk
28、learn.preprocessing import MinMaxScaler mms = MinMaxScaler() from sklearn.model_selection import train_test_split #把 13 个特征赋给 X,标签赋给 y X, y = df_wine.iloc:, 1:.values, df_wine.iloc:, 0.values X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0) df_wine = pd.read_c
29、sv(rC:Userslenovodatawine.data,header=None) df_wine.columns = Class label, Alcohol, Malic acid, Ash, Alcalinity of ash, Magnesium, Total phenols, Flavanoids, Nonflavanoid phenols, Proanthocyanins, Color intensity, Hue, OD280/OD315 of diluted wines, Proline print(Class labels, np.unique(df_wineClass
30、label) df_wine.head() 对训练集、测试集进行标准化处理为对这个过程进行可视化,我们以一个特征为例运行结果3.2.5 离散化连续值在一些分类算法中(如决策树、关联算法等),要求数据为分类形式的,为此,需要对一些ex = pd.DataFrame(0, 1, 2 ,1, 3.1, 2.2) # 标准化处理 ex1 = (ex0 - ex0.mean() / ex0.std(ddof=0) # Please note that pandas uses ddof=1 (sample standard deviation) # by default, whereas NumPys s
31、td method and the StandardScaler # uses ddof=0 (population standard deviation) # 归一化处理 ex2 = (ex0 - ex0.min() / (ex0.max() - ex0.min() #重新命令 dataframe 的列名 ex.columns = input, standardized, normalized ex from sklearn.preprocessing import StandardScaler stdsc = StandardScaler() X_train_std = stdsc.fit
32、_transform(X_train) X_test_std = stdsc.transform(X_test) X_train_norm = mms.fit_transform(X_train) X_test_norm = mms.transform(X_test) 连续属性离散化。连续属性离散化常用方法大致有:自定义分箱法、等宽法、等频法、基于聚类分析的方法等。(1)读取数据(2)对时间进行离散化,把日期转换为周(3)对多值数据进行离散化# 针对多值离散数据的离散化 map_df = pd.DataFrame(0-10, 0-40, 10-20, 0-40, 20-30, 0-40, 30
33、-40, 0-40, 40-50, 40-80, 50-60, 40-80, 60-70, 40-80, 70-80, 40-80, 80-90, 80, 90, 80, columns=age, age2) # 定义一个要转换的新区间 df_tmp = df.merge(map_df, left_on=age, right_on=age, how=inner) # 数据框关联匹配 df = df_tmp.drop(age, 1) # 丢弃名为 age 的列print (df.head(5) # 打印输出前 5 条数据 # 针对时间数据的离散化 for i, signle_data in en
34、umerate(dfdatetime): # 循环得到索引和对应值 single_data_tmp = pd.to_datetime(signle_data) # 将时间转换为 datetime 格式 df.loci,datetime = single_data_tmp.weekday() # 离散化为周几print (df.head(5) # 打印输出前 5 条数据 import pandas as pd from sklearn.cluster import KMeans from sklearn import preprocessing # 读取数据 df = pd.read_table
35、(rC:Userslenovodatadata7.txt, names=id, amount, income, datetime, age) print (df.head(5) # 打印输出前 5 条数据 (4)用自定义分箱法对连续值进行离散化(5)使用聚类法实现离散化# 方法 2 使用聚类法实现离散化 data = dfamount # 获取要聚类的数据,名为 amount 的列data=np.array(data) #转换为数组,便于使用 reshape,否则可能出现警告信息data_reshape = data.reshape(data.shape0, 1) # 转换数据形状 model
36、_kmeans = KMeans(n_clusters=4, random_state=0) # 创建 KMeans 模型并指定要聚类数量 keames_result = model_kmeans.fit_predict(data_reshape) # 建模聚类dfamount2 = keames_result # 新离散化的数据合并到原数据框print (df.head(5) # 打印输出前 5 条数据 # 针对连续数据的离散化 # 方法 1:自定义分箱区间实现离散化 bins = 0, 200, 1000, 5000, 10000 # 自定义区间边界dfamount1 = pd.cut(d
37、famount, bins) # 使用边界做离散化print (df.head(5) # 打印输出前 5 条数据 3.2.6 选择有意义的特征当数据预处理完成后,我们需要选择有意义的特征输入机器学习的算法和模型进行训练。通常来说,从两个方面考虑来选择特征:特征是否发散:如果一个特征不发散,例如方差接近于 0,也就是说样本在这个特征上基本上没有差异,这个特征对于样本的区分并没有什么用。特征与目标的相关性:这点比较显见,与目标相关性高的特征,应当优选选择。降维降维方法比较多,如正则化降维、PCA、LDA 等降维。(1)利用方差过滤法选择特征这种方法比较粗糙,有时可能性能反而会下降。(2)利用相关系
38、数法这里利用卡方来计算相关系数。用 feature_selection 库的 SelectKBest 类和 chi2 类来计算相关系数,选择特征的代码如下:运行结果(部分)from sklearn.feature_selection import SelectKBest from sklearn.feature_selection import chi2 #选择K 个最好的特征,返回选择特征后的数据 X, y = df_wine.iloc:, 1:.values, df_wine.iloc:, 0.values SelectKBest(chi2, k=4).fit_transform(X, y
39、) from sklearn.feature_selection import VarianceThreshold #方差选择法,返回值为特征选择后的数据 #参数 threshold 为方差的阈值 VarianceThreshold(threshold=0.8).fit_transform(df_wine) (3)利用正则化方法选择特征使用正则化惩罚项的模型, 除了可用于筛选特征外, 也可降维。 这里使用 feature_selection 库的 SelectFromModel 类结合带 L1 惩罚项的逻辑回归模型来选择特征,具体代码如下:(4)基于树模型来选择特征树模型中GBDT 也可用于特
40、征选择,使用 feature_selection 库的SelectFromModel 类结合GBDT模型,来选择特征的代码如下:(5)利用随机森林来选择特征from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import train_test_split X, y = df_wine.iloc:, 1:.values, df_wine.iloc:, 0.values X_train, X_test, y_train, y_test = train_test_split(X, y, te
41、st_size=0.3, random_state=0) feat_labels = df_wine.columns1: #森林中树的数量,随机种子,并发数依据核数等 forest = RandomForestClassifier(n_estimators=10000,random_state=0,n_jobs=-1) forest.fit(X_train, y_train) importances = forest.feature_importances_ indices = np.argsort(importances):-1 from sklearn.feature_selection
42、import SelectFromModel from sklearn.ensemble import GradientBoostingClassifier #GBDT 作为基模型的特征选择SelectFromModel(GradientBoostingClassifier().fit_transform(X, y) from sklearn.feature_selection import SelectFromModel from sklearn.linear_model import LogisticRegression #带 L1 惩罚项的逻辑回归作为基模型的特征选择 X, y = df
43、_wine.iloc:, 1:.values, df_wine.iloc:, 0.values SelectFromModel(LogisticRegression(penalty=l1, C=0.1).fit_transform(X, y) 1) Color intensity2) Proline3) Flavanoids4) OD280/OD315 of diluted wines5) Alcohol6) Hue7) Total phenols8) Alcalinity of ash9) Malic acid10) Proanthocyanins11) Magnesium12) Nonfl
44、avanoid phenols13) Ash0.1824830.1586100.1509480.1319870.1065890.0782430.0607180.0320330.0254000.0223510.0220780.0146450.013916 for f in range(X_train.shape1): print(%2d) %-*s %f % (f + 1, 30, feat_labelsindicesf, importancesindicesf) plt.title(Feature Importances) plt.bar(range(X_train.shape1), impo
45、rtancesindices, color=lightblue, align=center) plt.xticks(range(X_train.shape1), feat_labelsindices, rotation=45) plt.xlim(-1, X_train.shape1) plt.tight_layout() plt.show() sklearn 特征处理常用函数:类名功能说明StandardScaler数据预处理(归一化)标准化,基于特征矩阵的列,将特征值转换至服从标准正态分布MinMaxScaler数据预处理(归一化)区间缩放,基于最大最小值,将特征值转换到0, 1区间上Nor
46、malizer数据预处理(归一化)基于特征矩阵的行,将样本向量转换为“单位向量”Binarizer数据预处理(二值化)基于给定阈值,将定量特征按阈值划分OneHotEncoder数据预处理(哑编码)将定性数据编码为定量数据Imputer数据预处理(缺失值计算)计算缺失值,缺失值可填充为均值等PolynomialFeatures数据预处理(多项式数据转换)多项式数据转换FunctionTransformer数据预处理(自定义单元数据转换)使用单变元的函数来转换数据VarianceThreshold特征选择(Filter)方差选择法SelectKBest特征选择(Filter)可选关联系数、卡方校
47、验、最大信息系数作为得分计算的方法RFE特征选择(Wrapper)递归地训练基模型,将权值系数较小的特征从特征集合中消除SelectFromModel特征选择(Embedded)训练基模型,选择权值系数较高的特征法3.2.7 特征组合前面我们介绍了填充缺失值、对特征进行归一化、类别数据数值化或向量化、对连续型特征分段(或分箱)、找出更有意义的特征等预处理方法,这些方法在机器学习中经常使用。这些主要是对单个特征的处理,有时我们需要组合几个特征得到一个新特征,得到的这个新特征比原来的特征更有意义。假如我们预测房价的数据中包括经度和纬度,如果我们能组合这两个特征,得到一个有关街区的新特征,这个特征应
48、该更具代表性。当然,组合前,我们可以把经度和纬度进行分组或分箱,然后在进行组合。3.2.8 处 理 Excel需要安装 openpyxl pipinstall openpyxl或 conda install openpyxl3.3 正则化正则化在机器学习、深度学习中运用非常广泛,机器学习中在回归、降维时经常使用,在目前很火的深度学习中为避免过拟合也常使用。为何它作用如此之大,它的大致原理和作用是啥?接下来我们来做个简单介绍。3.3.1 正则化简介在机器学习中,很多被显式地设计用来减少测试误差的策略,统称为正则化。正则化旨在减少泛化误差而不是训练误差。目前有许多正则化策略。有些策略向机器学习模型
49、添加限制参数值的额外约束,如 L1、L2 等;有些策略向目标函数增加额外项对参数值进行软约束, 如作为约束的范数惩罚等。这些惩罚和约束通常用来使模型更简单,以便提高模型的泛化能力,当然也有些正则化,如集成方法,是为了结合多个假说来更好解释训练数据。正则化是机器学习领域的中心问题之一,其重要性只有优化问题才能与之匹敌。正则化的作用、原理,我们还是先从几张图来说明吧,图形直观明了,容易说明问题。测试误差误差训练误差模型复杂度(图 1测试误差与训练误差) (图 2根据房屋面积预测房价几个回归模型)这两个图说明了:(1) 、图 1 说明了,模型不是越复杂越好,训练精度随复杂度逐渐变小;测试误差刚开始随着模型复杂度而变小,但当复杂度超过某点之后,测试误差不但不会变小,反而会越来
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 菜市场配料价格管理办法
- 蒙自市无主遗体管理办法
- 虹桥商务区管理办法修订
- 行政办公类采购管理办法
- 西安市医德医风管理办法
- 衡阳市劳保基金管理办法
- 襄阳市滞留人员管理办法
- 西青区文娱场所管理办法
- 记者中宣部管理办法涉外
- 证监会重组资产管理办法
- 2022更新国家开放大学电大《调剂学》网络核心课形考网考作业及答案
- 广西鼎固经纬新材料科技有限公司年加工50万吨矿粉生产项目环评报告表
- 外研版六年级英语下册 Module2 unit1 教学课件PPT小学公开课
- 2021-2022学年人教版数学六年级上册第一单元测试卷【含答案】
- 《别墅设计任务书》word版
- EN 4644-001-2017(高清正版)
- 公铁联运物流园区及配套项目建议书写作模板
- 预应力混凝土简支T形梁桥毕业论文
- 变频器变频altivar71说明书
- 第三章_同步发电机励磁自动调节
- WBS BOM操作手册
评论
0/150
提交评论