版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第1章
机器学习简介1大纲机器学习简介机器学习的任务类型机器学习任务的一般流程机器学习工具包轰轰烈烈的人工智能新时代人工智能:让机器像人一样思考感知:语音、计算机视觉、…语言:自然语言理解记忆:知识表示推理:自动推理规划决策:自动规划学习能力:机器学习人工智能&机器学习图片:
.tw/2016/07/whats-difference-artificial-intelligence-machine-learning-deep-learning-ai/人工智能:让机器像人一样思考机器学习:实现人工智能的手段深度学习:采用多层(深度)神经网络实现机器学习第一次人工智能高潮(1956-1974)第二次人工智能高潮(1980-1987)第三次人工智能高潮(1995-)图片:/wp-content/uploads/2014/05/test.jpg1943:McCulloch和Pitts)于1943年提出神经元模型1949:DonaldHebb提出的Hebb学习理论1950:阿兰·图灵创造了图灵测试1952:ArthurSamuel设计了一款可以学习的西洋跳棋程序,并首次提出了机器学习的概念(1956)人工智能的发展离不开机器学习达特茅斯会议第一次正式提出AI概念第一届机器学习国际研讨会图片:/research_report/5de27b53af66005a44822b12?download=false深度学习模型近年的重要进展应用:计算机视觉监控人脸识别自动驾驶医疗制造业农业深度学习的成功应用:计算机视觉应用:推荐75%以上的观看来自推荐30%以上的购买来自推荐应用:自然语言处理社交媒体监控机器翻译语法检查电子邮件过滤应用:游戏AlphaGo&围棋AlphaStar&星海争霸IILibratus&德州扑克绝悟AI
&王者荣耀其他应用AlphaFolder&蛋白质结构预测大纲机器学习简介机器学习的任务类型机器学习任务的一般流程机器学习工具包什么是机器学习?
机器学习算法
语音识别图像识别下棋“Howareyou”根据经验“猫”“5-5”(下一次移动)机器学习的类型根据经验(训练数据)包含的信息,机器学习分为:监督学习无监督学习强化学习半监督学习自监督学习迁移学习终生学习元学习…监督学习监督学习分类(Classification)回归(Regression)
??
回归
电视广告费用广播广告费用产品销量(标量)训练数据:输入输出例:产品销量预测报纸广告费用分类
两类分类多类分类
输入输入Yes,No
例:两类分类垃圾邮件过滤(/)
Yes/NoYesNo训练数据例:多类分类
“monkey”“cat”“dog”“monkey”“cat”“dog”训练数据图像识别强化学习监督学习强化学习下一次移动:“5-5”下一次移动:“3-3”第一次移动……移动……赢!从行为的反馈(奖励或惩罚)中学习设计一个回报函数增强学习的任务:找到一条回报值最大的路径AlphaGo:监督学习+强化学习无监督学习无监督学习聚类(Clustering)降维(DimensionReduction)
发现数据中的“有意义的模式”,亦被称为知识发现。密度估计/生成模型聚类开放问题:需要多少个簇?降维/嵌入表示/词嵌入:机器读入很多文档,学习到每个单词的表示dogcatrabbitjumprunflowertreeWordEmbedding大纲机器学习简介机器学习任务的类型机器学习任务的一般流程机器学习工具包机器学习的三要素
“猫”
例:sin曲线拟合
sin_fitting.ipynb00.597523660.11111111,0.176224540.222222221.079453430.333333331.036838040.444444440.622843560.55555556-0.488398960.66666667-1.321929830.77777778,-0.685121360.88888889-0.196859021-0.425677771.函数集合1.函数集合:3次多项式
2.目标函数:函数的好坏
3.优化算法:挑选最佳的函数
最小二乘:解析求解3.优化算法:最小二乘解析求解
正规方程组(NormalEquations)3.优化算法:最小二乘解析求解
结果最佳函数(模型):训练集上的平均损失:
测试集上的平均损失:
还能更好?
回到第1步:重新设计函数集合函数集合:5阶多项式
训练集上的平均损失:
测试集(200个样本)上的平均损失:
回到第1步:重新设计函数集合函数集合:9阶多项式
训练集上的平均损失:
测试集上的平均损失:
模型选择
1.2.3.Amorecomplexmodelyieldslowererrorontrainingdata.
复杂模型能在训练集上得到更小的损失。模型选择复杂模型并不能在测试集上得到更好的性能。过拟合选择合适的模型过拟合回到第2步:重新设计目标函数
正则
平滑的函数更可能正确。
更平滑注意:正则项不包括截距项。正则
模型选择:我们喜欢平滑的函数,但也不能太平滑。
L2正则L1正则更平滑更平滑奥卡姆剃刀原理
训练样本数目
无正则L2正则
当训练样本数目无穷大时,带正则和无正则最优模型相同。总结:机器学习任务的一般步骤给定任务,分析可能的相关特征,收集训练数据特征工程确定函数集合确定目标函数损失函数正则项模型训练,确定优化算法根据训练数据得到模型参数模型选择:在验证集上评估模型预测性能机器学习任务是一个迭代的过程。常用机器学习算法
每个机器学习算法特有:正则项优化算法超参数调优:留出法/交叉验证模型评价指标各机器学习算法共有:大纲机器学习简介机器学习的任务类型机器学习任务的一般流程机器学习工具包AnacondaAnaconda:初学Python、入门机器学习首选
很多有用的工具包:
Pandas、NumPy、SciPy和Scikit-Learn、TensorFlow
Notebook环境:JupyterNotebook/download/Scikit-Learn基本功能有六个部分:
分类(Classification)回归(Regression)聚类(Clustering)数据降维(Dimensionalityreduction)
模型选择(ModelSelection)数据预处理(Preprocessing)各种机器学习算法有统一的接口官网:/stable/中文版用户手册:/cn/0.19.0/常用深度学习框架Python的IDE/pycharm/社区版免费本章总节机器学习:从数据中学习机器学习任务的分类:监督学习、无监督学习、强化学习机器学习三要素:函数集合目标函数:损失函数、正则项(过拟合/欠拟合
模型性能评估/超参数调优)优化模型性能评估:验证集留出法交叉验证机器学习平台传统机器学习模型:sklearn深度学习模型:Tensorflow/Keras、PyTorch、…Python集成开发环境:PyCharmAnaconda第2章
模型评估与模型选择对一个给定的机器学习任务,通常很多模型都能实现基本功能。我们选择哪个模型?大纲K近邻分类器(K-NearestNeighbors,KNN)模型评估模型选择超参数搜索
根据病人的恶性结节数量和年龄预测病人的五年存活率恶性结节数量年龄存活过世
根据病人的恶性结节数量和年龄预测病人的五年存活率对新的测试样本,根据其邻近样本来判断类别恶性结节数量年龄测试样本K=1的预测根据病人的恶性结节数量和年龄预测病人的五年存活率对新的测试样本,根据其邻近样本来判断类别恶性结节数量年龄测试样本
K=2
的预测根据病人的恶性结节数量和年龄预测病人的五年存活率对新的测试样本,根据其邻近样本来判断类别恶性结节数量年龄测试样本
K=3
的预测根据病人的恶性结节数量和年龄预测病人的五年存活率对新的测试样本,根据其邻近样本来判断类别恶性结节数量年龄测试样本
K=3
的预测根据病人的恶性结节数量和年龄预测病人的五年存活率对新的测试样本,根据其邻近样本来判断类别恶性结节数量年龄测试样本
如何选择KNN模型关键问题:如何衡量邻居之间的接近程度?K应该取多少?距离度量欧氏距离(L2距离)
距离度量
曼哈顿距离(L1距离)
距离度量余弦距离
距离度量
汉明距离
特征缩放特征尺度会影响距离度量当不同特征的取值范围差异很大时,范围大的特征会主导距离计算。恶性结节数量年龄特征缩放特征尺度会影响距离度量当不同特征的取值范围差异很大时,范围大的特征会主导距离计算。恶性结节数量年龄放大局部区域可以看到:距离判断会受到坐标尺度影响。如果不做特征缩放,最近邻可能主要由数值范围更大的特征决定。特征缩放特征缩放:将不同特征调整到可比较的尺度恶性结节数量年龄经过缩放后,年龄和手术次数等特征在距离计算中的影响更均衡。缩放后,最近邻可能发生变化;这说明预处理对KNN很关键。常用特征缩放方法
Scilit-learn中常用的特征缩放器缩放器说明StandardScaler标准化,对每维特征,将特征值取值范围标准化(0均值、1方差)MinMaxScaler区间缩放,对每维特征,将特征值缩放到[0,1]对非常小的标准差的特征更鲁棒在稀疏数据中保留零元素MaxAbsScalerScilit-learn中常用的特征缩放器的API函数方法功能xxx.fit()拟合数据xxx.fit_transform()拟合并转换数据xxx.transform()转换数据xxx.inverse_transform()逆转换sklearn中的特征变换器(transformer)基本上都是如上接口transformer.fit(X_train)X_train_transf=transformer.transform(X_train)X_test_transf=transformer.transform(X_test)三部曲:例:数据标准化
#数据标准化fromsklearn.preprocessingimportStandardScaler#构造输入特征的标准化器ss=StandardScaler()#分别对训练和测试数据的特征进行标准化处理X_train=ss.fit_transform(X_train)X_test=ss.transform(X_test)标准化:将输入特征的均值变为为0,方差为1如何选择KNN模型关键问题:如何衡量邻居之间的接近程度?K应该取多少?KNN决策边界:K=1K=1时,决策边界非常复杂,容易受噪声或孤立点影响。恶性结节数量年龄KNN决策边界:K=1全部样本K取全部样本时,模型过于平滑,几乎只按整体多数类预测。恶性结节数量年龄K的取值影响决策边界K小:边界复杂、灵活但可能过拟合。K大:边界平滑、稳定但可能欠拟合。如何确定K的方法将在下一小节讨论KNN天然适合处理多累分类任务例:3类鸢尾花分类(K=3)KNN亦可用于回归KNN不只用于分类,也可以用于回归。K=1、K=3、K=20会产生不同平滑程度的预测曲线Sklearn中KNN的语法
Sklearn中KNN的语法函数方法功能大纲K近邻分类器(K-NearestNeighbors,KNN)模型评估模型选择超参数搜索KNN中K的取值影响决策边界K小:边界复杂、容易贴合训练样本K大:边界平滑KNN中K的取值影响决策边界
例:鸢尾花分类
模型评估对一个机器学习任务,哪个模型最好?选择性能最好的模型如何评价模型的性能?评价指标:例如,分类正确率用什么数据集评价?
(未参与模型训练的)测试集上泛化性能模型评估哪个模型最好?选择性能最好的模型怎么评价模型的性能?评价指标:例如,分类正确率用什么数据集评价?
(未参与模型训练的)测试集上泛化性能训练集测试集全体数据模型评估训练阶段:在训练集上,根据给定超参数和学习算法训练模型
训练数据用于拟合模型。
测试数据用于独立评估模型。模型评估测试阶段:在留出的测试集用(给定超参数)训练好的模型预测比较预测结果和测试集的真实标签评估模型的性能根据所有数据,和确定的最佳超参数,重新训练模型(最终模型)Sklearn中的数据集划分APIsklearn.model_selection.train_test_split(*
arrays,**
options
)参数说明*arrayssequenceofindexableswithsamelength/shape[0]
输入可以是列表、numpy数组、稀疏矩阵或padas中的DataFrametest_sizetrain_sizefloatorint,default=None,类似test_sizerandom_stateintorRandomStateinstance,default=Noneshufflebool,default=True,切分前是否对数据进行打乱。stratifyarray-like,default=None
如果不为None,以分层方式切分数据,并将其用作类标签返回splitting:list,length=2*len(arrays),切分后的训练集和测试集例:数据集划分fromsklearn.model_selectionimporttrain_test_splitX
=
np.arange(1,
25).reshape(12,
2)
y
=
np.array([0,
1,
1,
0,
1,
0,
0,
1,
1,
0,
1,
0])X_train,
X_test,
y_train,
y_test
=
train_test_split(X,
y,
test_size=0.33,
random_state=4,
stratify=y
)
X_train
array([[21,22],
[1,2],
[15,16],
[13,14],
[17,18],
[19,20],
[23,24],
[3,4]])
X_test
array([[11,12],
[7,8],
[5,6],
[9,10]])
y_train
array([1,0,1,0,1,0,0,1])
y_test
array([0,0,1,1])训练集和测试集中0/1的比例相同,同全体数据相同(0和1各占0.5)例:鸢尾花分类任务上KNN模型的性能评估#该示例代码演示KNN分类器对鸢尾花进行分类#导入包含KNN分类器的类fromsklearn.neighborsimport
KNeighborsClassifier
#分类任务,用正确率作为模型性能评价指标fromsklearn.metricsimportaccuracy_score#将数据划分为训练数据与测试集fromsklearn.model_selectionimporttrain_test_split#随机采样20%的数据构建测试集,其余80%作为训练集,分类任务采用分层采样策略X_train,X_test,y_train,y_test=train_test_split(X,y,random_state=33,test_size=0.2,stratify=y)#KNN中K近邻的数目设为5K=5#生成KNN分类器的实例knn=
KNeighborsClassifier(n_neighbors=K)
#用训练数据训练KNN分类器knn.fit(X_train,y_train)
#对测试集进行预测y_pred=knn.predict(X_test)
#计算测试集上的正确率accuracy=accuracy_score(y_test,y_pred)
大纲K近邻分类器(K-NearestNeighbors,KNN)模型评估模型选择超参数搜索模型选择
验证集的在训练集中留出一部分数据做为验证集,以模型在验证集上的性能做为模型泛化性能的估计,并以此作为选择超参数的依据。训练集验证集测试集全体训练数据全体数据验证集的切分方法同测试集的划分:train_test_split用留出法构造验证集从训练集中留出一部分数据作为验证集在训练集上,训练不同超参数对应的学习算法,得到多个不同超参数对应的模型用留出法构造验证集在验证集训练集上对多个不同超参数对应的模型进行性能评估,选择性能最好的模型对最佳超参数,在所有训练数据(训练集+验证集)上训练模型用留出法构造验证集对最佳超参数上用所有训练数据训练好的模型在测试集进行性能评估对最佳超参数,在所有数据(训练集+验证集+测试集)上训练模型例:留出法鸢尾花分类:共150样本、3种类别每个样本4维特征用交叉验证留出法构造验证集从训练集中分离一部分数据作为验证集,会使得模型训练能使用的数据减少(机器学习中训练样本越多越好)。有更好的办法?K折交叉验证测试集注意:该方法计算代价很高,但不会浪费太多的数据,当样本数据集较少时有优势全体训练数据训练集验证集验证集训练集训练集验证集训练集训练集验证集训练集训练集验证集训练集用交叉验证留出法构造验证集训练集验证集验证集训练集训练集验证集训练集
……用交叉验证留出法构造验证集留出一部分数据作为测试集对训练集采用K折交叉验证:根据每折的训练数据,训练不同超参数对应的学习算法,得到每个超参数每折交叉验证对应的模型,并在每折的验证集上评估每个超参数对应的模型的性能用交叉验证留出法构造验证集对最佳超参数,在所有训练数据上训练模型对最佳超参数上用所有训练数据训练好的模型在测试集进行性能评估对最佳超参数,在所有数据上训练模型Sklearn中交叉验证的APIfromsklearn.model_selectionimportKfoldKfold:交叉验证,直接随机的将数据划分为K折,不受class和影响fromsklearn.model_selectionimportStratifiedKFoldStratifiedKFold分层交叉验证:根据数据集的分布来划分,使得划分后的数据集的目标比例和原始数据集近似例:交叉验证参数n_splits:折叠次数,默认为3,至少为2。Methods
StratifiedKFold.split(X,y,groups=None)返回值:训练集数据的index与验证集数据的index。class
sklearn.model_selection.StratifiedKFold(n_splits=5,
*,shuffle=False,random_state=None)fromsklearn.model_selectionimportStratifiedKFoldX=np.array([[1,
2],
[3,
4],
[1,
2],
[3,
4],
[5,
6],
[7,
8]])
y=np.array([0,
0,
0,
1,
1,
1])skf=StratifiedKFold(n_splits=3)
fortrain_index,test_indexinskf.split(X,y):
print("TRAIN:",train_index,
"TEST:",test_index)TRAIN:[1245]TEST:[03]TRAIN:[0235]TEST:[14]TRAIN:[0134]TEST:[25]输出:分层交叉验证分类:分层交叉验证(StratifiedKFold)每一折都是分层的(保持各类标签的相对比例与总体样本一致)
例:分层交叉验证
import工具包生成2折的StratifiedKFold实例split取出每折的训练数据和验证数据索引样本索引0120134021213341总的训练数据:共2类,每类两个样本第1折:训练样本为第1个和第3个样本;验证样本为第0个和第2个样本第2折:训练样本为第0个和第2个样本;验证样本为第1个和第3个样本例:交叉验证鸢尾花分类:共150样本、3种类别每个样本4维特征#该示例代码采用10交叉验证搜索KNN的超参数K#设置超参数搜索范围Ks
=range(1,
31,
2)tuned_parameters=dict(n_neighbors=
Ks)forj,Kinenumerate(Ks):knn=KNeighborsClassifier(n_neighbors=K)cv_scores=cross_val_score(knn,X_train,y_train,cv=10,scoring='accuracy')accuracy.append(cv_scores.mean())#最佳超参数Kindex=np.unravel_index(np.argmax(accuracy),len(Ks))best_parameter=Ks[index[0]]
时序交叉验证
模型训练模型训练模型训练模型训练验证模型训练模型训练验证模型训练模型训练模型训练验证模型复杂度与误差训练误差通常会随着模型复杂度上升而下降。验证误差通常呈U形:太简单或太复杂都会变差。模型复杂度过拟合:训练误差低,但验证误差高。原因是模型过度贴合训练样本噪声。模型复杂度合适模型:验证误差最低(训练误差和交叉验证误差都较低)不能只追求训练误差最低。说明模型既能学习规律,也能较好泛化。大纲K近邻分类器(K-NearestNeighbors,KNN)模型评估模型选择超参数搜索超参数搜索
sklearn中的网格搜索:GridSearchCVclass
sklearn.model_selection.GridSearchCV(estimator,
param_grid,
scoring=None,
fit_params=None,
n_jobs=1,
iid=True,
refit=True,
cv=None,
verbose=0,
pre_dispatch=‘2*n_jobs’,
error_score=’raise’,
return_train_score=’warn’)
param_grid:待评价参数(可以多个超参数一起调优:grid)
X,
y:全体训练数据
iid:样本是否是独立同分布。
refit:评价指标(后续我们会学习针对不同应用的多种评价指标)是否在找到最佳超参数后用全体训练数据再次训练(fit)模型参数。
error_score:训练失败的处理参数说明:例:GridSearchCVclass
sklearn.model_selection.GridSearchCV(estimator,
param_grid,
scoring=None,
fit_params=None,
n_jobs=1,
iid=True,
refit=True,
cv=None,
verbose=0,
pre_dispatch=‘2*n_jobs’,
error_score=’raise’,
return_train_score=’warn’)
3.生成一个GridSearchCV实例,需要的参数包括:学习器(knn)、参数搜索范围、交叉验证参数、评价指标…
1.设置参数搜索范围
2.生成学习器的实例
4.调用GridSearchCV实例的fit函数。这个过程可能很慢(次数:搜索参数的数目*交叉验证折数)
5.运行结果:属性cv_results_最佳超参数:best_params_最佳得分:best_score_最佳模型:best_estimator_(refit=true)适用。…超参数搜索随机搜索:RandomizedSearchCV可以设置分布的超参数,根据给定分布随机采样对于给定搜索范围(list)的超参数,对list均匀采样对上述两步中得到的n_iter组采样结果,进行遍历。如果给定的搜索范围均为list,则不放回抽样n_iter次。/wj-1314/p/10422159.html本章小节KNN的特征建模快:模型主要是存储训练数据预测慢:需要进行大量距离计算大数据集可能占用较多内存模型性能评估:测试集模型选择:验证集留出法交叉验证模型超参数搜索范围:网格搜索、随机搜索第3章
线性回归大纲线性回归简介回归任务的损失函数线性回归的正则化线性回归的解析求解梯度下降法线性回归的超参数调优回归
一元线性回归
?
例:一元线性回归1.7368409.2-41.20354141.5340377.14-35.64330101.3376342.0833.92306705954962.94-8.927502041.3331342.08-11.08306252.2556493.162.914141422.8?593.78-486-多元线性回归
电视广告费用广播广告费用产品销量(标量)训练数据:输入输出报纸广告费用例:产品销量预测
可通过散点图/相关系数初步检查目标与特征之间是否符合线性关系例:产品销量预测产品销量(sales)与电视广告费用(TV)以及广播广告费用(radio)线性相关程度较高,相关系数大于0.5;产品销量(sales)与报纸广告费用(newspaper)线性相关程度不高(相关系数小于0.3)。例:产品销量预测importpandasaspdfromsklearn.model_selectionimporttrain_test_splitfromsklearn.metricsimportmean_squared_error #回归任务的评价指标#读取数据dpath=
"../data/"df=pd.read_csv(dpath+
"Advertising.csv")#从原始数据中分离输入特征x和输出yy=df['sales']X=df.drop(['sales',
'Unnamed:0'],axis=
1)#将数据分割训练数据与测试数据,随机采样20%的数据构建测试样本,其余作为训练样本X_train,X_test,y_train,y_test=train_test_split(X,y,random_state=33,test_size=0.2)#1使用默认配置初始化线性回归实例lr=
LinearRegression()#2用训练数据训练模型参数lr.fit(X_train,y_train)#3用训练好的模型对训练集和测试集进行预测y_test_pred_lr=lr.predict(X_test)y_train_pred_lr=lr.predict(X_train)#评价指标print("TheMSEontestis%f"%(mean_squared_error(y_test,y_test_pred_lr)))print("TheMSEontrainis%f"%(mean_squared_error(y_train,y_train_pred_lr)))
例:产品销量预测
训练集MSE测试集MSE模型100模型20模型33.983944
2.8602300.038194两个特征的线性回归模型(模型2)的性能比只用一个特征的模型(模型1)的性能好得多(测试集MSE分别为2.3和7.7)。使用三个特征的线性回归模型(模型3)在训练集上的性能最好,但在测试集上的性能反而不如使用两个特征的模型2(测试集MSE分别为2.32和2.30)Recall:机器学习的目标是找到一个在测试集上训练最好的模型。
大纲线性回归简介回归任务的损失函数线性回归的正则化线性回归的解析求解梯度下降法线性回归的超参数调优
线性回归
正则项损失函数
损失函数
当损失函数取L2损失时,训练集上所有训练数据的预测残差的平方和记为(ResidualSumofSquares,RSS
)损失函数
L2损失函数的概率解释
单个数据点的概率密度函数为:则log似然函数为L2损失函数的概率解释
L2损失函数的概率解释
所以:极大似然估计等价于最小二乘(最小L2损失函数)。极大似然估计等价于负log似然最小,因此负log似然也被称为一种损失函数:负log似然损失。
L2损失是高斯白噪声假设下的负log似然损失。分类任务中Logistic回归中采用的损失函数也是负log似然损失。负log似然损失我们也可以通过残差的分布来检验回归模型是否足够正确如果模型预测合理,残差应为0均值的正态分布残差分布残差的分布并不符合0均值的正态分布该模型(最小二乘回归模型)预测效果并不好从真实值和残差的散点图来看,真实值较大时,预测残差大多<0。模型还没有完全建模y与x之间的关系,还有一部分关系残留在残差中
胡伯(Huber)损失函数
左上方和右下出现了一些异常点OLS和Ridgeregression(L2损失)都不同程度上受到了异常点的影响,而Huber损失受影响很小正常点所占的比重更小,OLS和Ridgeregression(L2损失)所决定出的回归模型几乎不工作,Huber损失性能很好sklearn中实现Huber损失的回归模型:HuberRegressor采用Huber损失的回归模型:HuberRegressor
fromsklearn.linear_modelimportHuberRegressorhuber=HuberRegressor()huber.fit(X_train,y_train)y_train_pred_huber=huber.predict(X_train)fromsklearn.linear_modelimportLinearRegressionlr=LinearRegression()lr.fit(X_train,y_train)y_train_pred_lr=lr.predict(X_train)Huber损失:L2损失:当训练样本很多时,可采用随机梯度下降来优化模型参数sklearn中的实现为SGDRegressor损失函数参数loss=‘huber’
和HuberRegressor中稍有不同,详见sklearn文档:
/stable/modules/linear_model.html#huber-regression当有数据噪声严重时,还可采用RANSAC(RANdomSAmpleConsensus)识别噪声sklearn中对应的类为RANSACRegressor采用Huber损失的回归模型:SGDRegressor
回归任务中L1损失对应的噪声模型是什么分布?L1损失最小也等价于极大似然估计吗?提示:Laplace分布为思考题
大纲线性回归简介回归任务的损失函数线性回归的正则化线性回归的解析求解梯度下降法线性回归的超参数调优
线性回归
正则项损失函数
正则项
线性回归中常用正则函数
由于线性回归模型简单,在确定无需正则时,可以没有正则项此时目标函数为:Scikit-Learn中实现的最小二乘线性回归为:LinearRegression无正则:最小二乘
class
sklearn.linear_model.LinearRegression(fit_intercept=True,
normalize=False,
copy_X=True,
n_jobs=1)LinearRegression
参数说明备注fit_intercept模型中是否包含截距项。normalize对数据进行归一化会使得超参数学习更鲁棒,且几乎和样本数目没有关系。回归中用的不多,更多的时候用标准化copy_Xn_jobs并行计算时使用CPU的数目。-1表示使用所有的CPU资源(建议与设置为CPU核的数目相同,现在CPU基本上都支持超线程,-1可能对应的是超线程后的值,最好设置为CPU核的数目)。class
sklearn.linear_model.LinearRegression(fit_intercept=True,
normalize=False,
copy_X=True,
n_jobs=1)LinearRegression
属性说明备注coef_回归系数/权重,与特征维数相同。intercept_截距项。方法说明备注fit(X,
y[,
sample_weight])如果样本来自不同设备(如精度度不同),可设置样本权重。predict(X)使用训练好的模型进行预测,返回预测值score(X,
y[,
sample_weight])请见回归模型评价指标部分。
岭回归:L2正则的线性回归
岭回归
岭回归
最大后验估计(Maximumaposterioriestimation,MAP)等价于岭回归的目标函数(去掉负号,取最大变成取最小):
特征缩放#数据标准化fromsklearn.preprocessingimportStandardScaler#构造输入特征的标准化器ss_X=StandardScaler()#分别对训练和测试数据的特征进行标准化处理X_train=ss_X.fit_transform(X_train)X_test=ss_X.transform(X_test)
sklearn中的岭回归:Ridgeclass
sklearn.linear_model.Ridge(alpha=1.0,
fit_intercept=True,
normalize=False,
copy_X=True,
max_iter=None,
tol=0.001,
solver=’auto’,
random_state=None)
参数说明:属性同LinearRegression常用方法同LinearRegression
Lasso:L1正则的线性回归
Lasso
Lasso
最大后验估计(Maximumaposterioriestimation,MAP)等价于Lasso回归的目标函数(去掉负号,取最大变成取最小):
sklearn中的Lasso:Lassoclass
sklearn.linear_model.Lasso(alpha=1.0,
fit_intercept=True,
normalize=False,
precompute=False,
copy_X=True,
max_iter=1000,
tol=0.0001,
warm_start=False,
positive=False,
random_state=None,
selection=’cyclic’)
参数说明:属性同LinearRegression常用方法同LinearRegression正则项还可以为L1正则和L2正则的线性组合:得到弹性网络的目标函数:Sklearn中实现的弹性网络为:ElasticNet弹性网络:L1正则+L2正则
class
sklearn.linear_model.ElasticNet(alpha=1.0,
l1_ratio=0.5,
fit_intercept=True,
normalize=False,
precompute=False,
max_iter=1000,
copy_X=True,
tol=0.0001,
warm_start=False,
positive=False,
random_state=None,
selection=’cyclic’)
大纲线性回归简介回归任务的损失函数线性回归的正则化线性回归的解析求解梯度下降法线性回归的超参数调优
目标函数最优值
为正定矩阵,则在临界点目标函数取最小值。
最小二乘(OrdinaryLinearSquare,OLS)目标函数(矩阵形式)为:梯度为:从而:最小二乘的解析求解:正规方程组
正规方程组(NormalEquations)
OLS的最优解:SVD
Scikit-Learn中LinearRegression
中采用的优化方法。
𝑁
𝑁
𝑁
OLS的最优解:SVD
OLS的最优解:SVD
岭回归的最优解:SVD
岭回归的最优解:SVD
岭回归:权重衰减
权重衰减:权重幅值变小Lasso的无法求得解析解,可用迭代求解。Lasso的无法求得解析解大纲线性回归简介回归任务的损失函数线性回归的正则化线性回归的解析求解梯度下降法线性回归的超参数调优
梯度下降Recall:梯度下降法
最小二乘
参数的更新量与输入与预测残差的相关性有关。
损失函数对梯度的影响
岭回归
梯度的计算:计算梯度时需用到每个训练样本,当样本数目很多时,计算费用高:随机梯度下降、小批量梯度下降动量:比梯度更好的移动方向学习率:太小,收敛慢学习率太大,不收敛各参数公用一个学习率:特征缩放自适应学习率梯度下降的高阶话题
例:小批处理梯度下降
https://tangshusen.me/Dive-into-DL-PyTorch/#/chapter07_optimization/7.3_minibatch-sgd学习率
学习率对训练的影响目标函数变化太慢:学习率太低目标函数出现NaN:通常意味着学习率太高建议:[1e-3...1e-5]特征去量纲
特征标准化特征没有标准化
特征标准化:回忆:Ridge参数说明备注max_iter共轭梯度求解器的最大迭代次数。对于优化算法solver为'sparse_cg'和'lsqr',默认值由scipy.sparse.linalg确定。对于'sag'求解器,默认值为1000。tol解的精度,判断迭代收敛与否的阈值。当(loss>previous_loss-tol)时迭代终止。solver求解最优化问题的算法可取:'auto','svd','cholesky','lsqr','sparse_cg','sag','saga'请见下页random_state数据洗牌时的随机种子。仅用于'sag'求解器。class
sklearn.linear_model.Ridge(alpha=1.0,
fit_intercept=True,
normalize=False,
copy_X=True,
max_iter=None,
tol=0.001,
solver=’auto’,
random_state=None)优化计算有关参数回忆:Ridge取值说明备注'auto'根据数据类型自动选择求解器'svd'使用X的奇异值分解来计算Ridge系数对于奇异矩阵,比'cholesky'更稳定。'cholesky'使用标准的scipy.linalg.solve函数获得解析解'sparse_cg'使用scipy.sparse.linalg.cg中的共轭梯度求解器对大规模数据,比“cholesky”更合适'lsqr'使用专用的正则化最小二乘常数scipy.sparse.linalg.lsqr最快'sag'用随机平均梯度下降,当样本数n_samples和特征维数n_feature都很大时,比其他求解器更快当fit_intercept为True时,'sag’和'saga'只支持稀疏输入。“sag”和‘saga’快速收敛仅在具有近似相同尺度的特征上被保证,数据需要标准化'saga'sag的改进版本solver参数取值:class
sklearn.linear_model.Ridge(alpha=1.0,
fit_intercept=True,
normalize=False,
copy_X=True,
max_iter=None,
tol=0.001,
solver=’auto’,
random_state=None)SGDRegressor适合大数据量训练集(样本数目>10000)。随机梯度下降回归:SGDRegressor
支持的损失函数loss包括:‘squared_loss’:L2损失‘huber’:Huber损失‘epsilon_insensitive’:ɛ不敏感损失(SVM)‘squared_epsilon_insensitive’
支持的正则函数penalty包括:‘none’:无正则‘l2’:L2正则‘l1’:L1正则‘elasticnet’:L1正则+L2正则(参数l1_ratio为L1正则比例)参数epsilon是某些损失函数(huber、epsilon_insensitive、squared_epsilon_insensitive)需要的额外参数。class
sklearn.linear_model.SGDRegressor(loss=’squared_loss’,
penalty=’l2’,
alpha=0.0001,
l1_ratio=0.15,
fit_intercept=True,
max_iter=None,
tol=None,
shuffle=True,
verbose=0,
epsilon=0.1,
random_state=None,
learning_rate=’invscaling’,
eta0=0.01,
power_t=0.25,
warm_start=False,
average=False,
n_iter=None)参数alpha是正则惩罚系数,也用于学习率计算(请见下页)。目标函数为:
随机梯度下降回归:SGDRegressorclass
sklearn.linear_model.SGDRegressor(loss=’squared_loss’,
penalty=’l2’,
alpha=0.0001,
l1_ratio=0.15,
fit_intercept=True,
max_iter=None,
tol=None,
shuffle=True,
verbose=0,
epsilon=0.1,
random_state=None,
learning_rate=’invscaling’,
eta0=0.01,
power_t=0.25,
warm_start=False,
average=False,
n_iter=None)
优化相关的参数包括:
‘constant’:eta=eta0‘optimal’:eta=1.0/(alpha*(t+t0))‘invscaling’:eta=eta0/pow(t,power_t)
warm_start:是否从之前的结果继续。随机梯度下降中初始值可以是之前的训练结果,支持在线学习。初始值可在fit函数中作为参数传递。
average:是否采用平均随机梯度下降法(ASGD)。随机梯度下降实现参考文献:“StochasticGradientDescent”L.Bottou-Website,2010“TheTradeoffsofLargeScaleMachineLearning”L.Bottou-Website,2011.Lasso目标函数求解:次梯度法
Lasso目标函数求解:坐标轴下降法次梯度法收敛速度慢,Lasso求解推荐使用坐标轴下降法。
坐标轴下降法:沿坐标轴方向搜索在每次迭代中,在当前点处沿一个坐标轴方向进行一维搜索。循环使用不同的坐标轴。一个周期的一维搜索迭代过程相当于一个梯度迭代。利用当前坐标系统进行搜索,无需计算目标函数的导数,只按照某一坐标方向进行搜索最小值。梯度下降法:沿目标函数负梯度的方向搜索,梯度方向通常不与任何坐标轴平行。坐标轴下降法在稀疏矩阵上的计算速度非常快。Lasso的坐标轴下降法求解
第j维特征与残差的相关性利用去掉第j维后其他特征得到的预测的残差
Lasso的坐标轴下降法求解
稀疏:特征选择
Lasso的坐标轴下降法求解
3.2计算
回忆Lasso参数说明precompute是否使用预计算的Gram矩阵来加速计算。可取值:True,False,‘auto’或数组(array-like)。如果设置为'auto'则机器决定。max_iter最大迭代次数。tol解的精度,判断迭代收敛与否的阈值。当更新量小于tol时,优化代码检查优化的dualgap并继续直到小于tol
为止。warm_start是否从之前的结果继续。初始值可以是之前的训练结果,支持在线学习。初始值可在fit函数中作为参数传递。positive是否强制使系数为正。random_state随机选择特征的权重进行更新的随机种子。当参数selection
==‘random’有效。selection选择特征权重更新的方式,可选项有:‘cyclic’(循环更新),
‘random’(随机选择特征进行更新,通常收敛更快,尤其当参数tol>10-4时)。优化计算有关参数class
sklearn.linear_model.Lasso(alpha=1.0,
fit_intercept=True,
normalize=False,
precompute=False,
copy_X=True,
max_iter=1000,
tol=0.0001,
warm_start=False,
positive=False,
random_state=None,
selection=’cyclic’)正则小结L2正则使得线性回归系数收缩,模型稳定。当输入特征之间存在共线性时使用L2正则。L1正则也会收缩回归系数。当正则参数取合适值时,L1正则使得有些线性回归系数为0,得到稀疏模型。当输入特征多,有些特征与目标变量之间相关性很弱时,L1正则可能只选择强相关的特征,模型解释性好。
L2正则vs.L1正则Lasso岭回归
RSS等值线RSS最小值点正则约束Lasso系数岭回归系数大纲线性回归简介回归任务的损失函数线性回归的正则化线性回归的解析求解梯度下降法线性回归的超参数调优开方均方误差(RootedMeanSquaredError,RMSE)平均绝对误差(MeanAbsoluteError,MAE)绝对误差中值(MedianAbsoluteError,MedAE)平均平方log误差(MeanSquaredLogarithmicError,MSLE)回归模型的评价指标
回归模型的评价指标
当残差的均值为0时,二者相同
模型预测的MSE误差减少比例
sklearn中的评价模型性能的方式sklearn.metricsmetrics.explained_variance_score(y_true,
y_pred)Explainedvarianceregressionscorefunctionmetrics.mean_absolute_error(y_true,
y_pred)Meanabsoluteerrorregressionlossmetrics.mean_squared_error(y_true,
y_pred[,
…])Meansquarederrorregressionlossmetrics.mean_squared_log_error(y_true,
y_pred)Meansquaredlogarithmicerrorregressionlossmetrics.median_absolute_error(y_true,
y_pred)Medianabsoluteerrorregressionlossmetrics.r2_score(y_true,
y_pred[,
…])R^2(coefficientofdetermination)regressionscorefunction.Scikit-Learn中的Scoring参数Regression
‘explained_variance’metrics.explained_variance_score‘neg_mean_absolute_error’metrics.mean_absolute_error‘neg_mean_squared_error’metrics.mean_squared_error‘neg_mean_squared_log_error’metrics.mean_squared_log_error‘neg_median_absolute_error’metrics.median_absolute_error‘r2’metrics.r2_score同metrics一一对应
线性回归模型的超参数调优
特殊的交叉验证:留一交叉验证
AIC:BIC:AIC/BIC:依赖于对自由度的正确估计假设模型必需是正确,而且是对大样本(渐近结果)进行推导。当问题是欠定时(特征数大于样本数)会崩溃BIC/AIC/stable/auto_examples/linear_model/plot_lasso_model_selection.html#sphx-glr-auto-examples-linear-model-plot-lasso-model-selection-py
RidgeCV:在一组正则参数alphas中找最佳的alphaRidgeCVclass
sklearn.linear_model.RidgeCV(alphas=(0.1,
1.0,
10.0),
fit_intercept=True,
normalize=False,
scoring=None,
cv=None,
gcv_mode=None,
store_cv_values=False)与CV有关的参数:
scoring:评价指标
cv:
交叉校验划分策略。默认是None,采用高效的留一交叉验证。
gcv_mode:
广义留一交叉验证的模式,可选:None,‘auto’,‘svd’,eigen’。‘auto’/None当n_features>n_samples或X为稀疏矩阵时,用‘’eigen’
;否则用‘svd’
。自动选择更经济的计算方式。'svd'
用X的SVD分解(对稀疏矩阵不适用)'eigen'
store_cv_values:是否将每个alpha对应的交叉验证的值存储在属性cv_values_
中。LassoCVclass
sklearn.linear_model.LassoCV(eps=0.001,
n_alphas=100,
alphas=None,
fit_intercept=True,
normalize=False,
precompute=’auto’,
max_iter=1000,
tol=0.0001,
copy_X=True,
cv=None,
verbose=False,
n_jobs=1,
positive=False,
random_state=None,
selection=’cyclic’)与CV有关的参数:
Lasso的alphas可以通过两种方式设置:
案例分析:广告费用与产品销量
数据分析:
200个样本,没有缺失值,看不出来有噪声数据每个样本有3个数值型特征:TV,radio,newspaper标签:产品销量特征与特征之间的相关性不太高特征工程:特征均为数值型特征广告费用与产品销量
数据分析:chp3_1_EDA_advertising.ipynb
200个样本,没有缺失值,看不出来有噪声数据每个样本有3个数值型特征:TV,radio,newspaper标签:产品销量特征与特征之间的相关性不太高特征TV,radio与标签相关性较高,特征newspaper相关性不太高特征工程:chp3__FE_advertising.ipynb特征均为数值型特征,暂时不做过多处理,只是对特征做标准化处理,使得各特征处理后均为0均值、1标准差(并不要求是正态分布)广告费用与产品销量
岭回归Lasso弹性网络chp3_3_train_test_advertising.ipynb广告费用与产品销量数据集中随机选择20%样本作为测试数据,其他80%样本为训练数据特征最小二乘线性回归系数岭回归系数Lasso系数弹性网络系数TV3.9839443.9815243.9216423.921642radio2.8602302.8583042.8063742.806374newspaper0.0381940.0389250.0000000.000000截距项13.96909113.96928213.97252813.972528广告数据集上不同线性回归模型的系数
广告费用与产品销量广告数据集上不同线性回归模型的性能(R方分数)
数据集最小二乘线性回归岭回归Lasso弹性网络训练集上性能0.8962850.8962850.8959250.895925测试集上性能0.8937290.8938650.8991970.899197最小二乘线性回归模型在训练集上性能最好,但在测试集上性能最差(过拟合)Lasso模型/弹性网络在测试集上性能最好
本章总结线性回归函数集合:输入特征的线性组合目标函数损失函数:L2损失、L1损失、Huber损失正则项:L2正则、L1正则优化方法:解析法、梯度下降、坐标下降Sklearn中的线性回归实现
LinearRegression
Ridge/RidgeCV
Lasso/LassoCV
HuberRegressionSGDRegression第4章
特征工程
数据模型训练性能评估Recall:机器学习项目的开发过程数据和特征决定学习上限,算法和模型只是逼近这个上限。
数据探索性分析(ExploratoryDataAnalysis,EDA)是指在尽量少的先验假定下对数据进行探索,通过作图、制表和计算统计量等手段探索数据的结构和规律,了解变量间的相互关系以及变量与预测值之间的关系,从而帮助我们后续选择合适的特征工程技术和机器学习算法。数据探索有助于选择合适的数据预处理和学习器。输入特征类型、输出/标签的类型输入特征分布、输出/标签的分布:统计量、直方图输入特征之间的关系、输入特征与标签之间的关系数据的质量:是否有缺失值、是否有噪声点数据探索性分析二类分类问题:根据女性孕期体检信息和基因位点信息(SNP基因突变位点)预测受检者未来是否会患有妊娠糖尿病训练数据:共1000个样本带标签的A榜数据:200个样本,我们将其做为测试集例:糖尿病风险预测
数据总览连续的数值型特征身高、价格、销量、…离散特征/类别型特征
性别、受教育程度、….地点型特征(视情况可作为连续特征或类别型特征对待)IP地址、城市、经纬度、…时间型特征(视情况可作为连续特征或类别型特征对待)
日期、星期、月份、…特征类型id:和预测无关25个连续的数值型特征
孕次、产次、RBP4、年龄、身高、孕前体重、BMI、分娩时、糖筛孕周、VAR00007、wbc、ALT、AST、Cr、BUN、CHO、TG、HDLC、LDLC、ApoA1、ApoB、Lpa、hsCRP、舒张压58个离散特征/类别型特征SNP的55个位点数据(SNP1~55)、BMI分类、DM家族史、ACEID性别例:特征类型train=pd.read_csv('
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 产品交付异常情况函6篇
- 热爱生命,珍惜时光小学主题班会课件
- 确认项目进度汇报频率与内容范围通知函(4篇范文)
- 文学沙龙:著名童话与寓言故事会小学主题班会课件
- AI生成式技术传统节日活动策划与执行
- 2025-2026学年浅析皮肤科临床教学设计
- 关于提交参展材料的函(7篇范文)
- 遵守交通规则,确保平安出行,小学主题班会课件
- 外语学习者掌握高级语法应用技能指导书
- 制造业质量管理体系与检测规范指南
- 2026年企业所得税关联交易定价原则应用与转让定价文档准备指南
- 2024年工业废水处理工(高级)职业技能鉴定理论试题库-上(选择题)
- 2025年高考化学方程式
- 2025年化学专升本有机化学真题解析试卷(含答案)
- 垂直大模型项目实施方案
- GB/T 10454-2025包装非危险货物用柔性中型散装容器
- 【新教材】统编版(2024)八年级上册道德与法治全册教案
- 银行专项奖管理办法
- 2025年心肺复苏课件
- 三大常规报告分析课件
- 湖南省装配式建筑评价标准
评论
0/150
提交评论