交叉验证

吴恩达机器学习作业Python实现(五):偏差和方差

匿名 (未验证) 提交于 2019-12-02 22:51:30
在本练习中,您将实现正则化的线性回归和多项式回归,并使用它来研究具有不同偏差-方差属性的模型 在前半部分的练习中,你将实现正则化线性回归,以预测水库中的水位变化,从而预测大坝流出的水量。在下半部分中,您将通过一些调试学习算法的诊断,并检查偏差 v.s. 方差的影响。 1.1 Visualizing the dataset 我们将从可视化数据集开始,其中包含水位变化的历史记录,x,以及从大坝流出的水量,y。 这个数据集分为了三个部分: - training set 训练集:训练模型 - cross validation set 交叉验证集:选择正则化参数 - test set 测试集:评估性能,模型训练中不曾用过的样本 %matplotlib inline import numpy as np import matplotlib.pyplot as plt from scipy.io import loadmat import scipy.optimize as opt 读取数据 path = 'ex5data1.mat' data = loadmat(path) #Training set X, y = data[ 'X' ], data[ 'y' ] #Cross validation set Xval, yval = data[ 'Xval' ], data[ 'yval' ]

10、应用机器学习的建议(Advice for Applying Machine Learning)

故事扮演 提交于 2019-12-02 03:34:17
10.1 决定下一步做什么   到目前为止,我们已经介绍了许多不同的学习算法,如果你一直跟着这些视频的进度学习,你会发现自己已经不知不觉地成为一个了解许多先进机器学习技术的专家了。   然而,在懂机器学习的人当中依然存在着很大的差距,一部分人确实掌握了怎样高效有力地运用这些学习算法。而另一些人他们可能对我马上要讲的东西,就不是那么熟悉了。他们可能没有完全理解怎样运用这些算法。因此总是把时间浪费在毫无意义的尝试上。我想做的是确保你在设计机器学习的系统时,你能够明白怎样选择一条最合适、最正确的道路。因此,在这节视频和之后的几段视频中,我将向你介绍一些实用的建议和指导,帮助你明白怎样进行选择。具体来讲,我将重点关注的问题是假如你在开发一个机器学习系统,或者想试着改进一个机器学习系统的性能,你应如何决定接下来应该选择哪条道路?   为了解释这一问题,我想仍然使用预测房价的学习例子,假如你已经完成了正则化线性回归,也就是最小化代价函数𝐽的值,假如,在你得到你的学习参数以后,如果你要将你的假设函数放到一组新的房屋样本上进行测试,假如说你发现在预测房价时产生了巨大的误差,现在你的问题是要想改进这个算法,接下来应该怎么办?   实际上你可以想出很多种方法来改进这个算法的性能,其中一种办法是使用更多的训练样本。具体来讲,也许你能想到通过电话调查或上门调查来获取更多的不同的房屋出售数据。遗憾的是

机器学习:KNN

◇◆丶佛笑我妖孽 提交于 2019-11-30 23:24:47
KNN:K-nearst neighbors 简介: k-近邻算法采用测量不同特征值之间的距离来进行分类,简而言之为: 人以类聚,物以群分 KNN既可以应用于分类中,也可用于回归中;在分类的预测是,一般采用 多数表决法 ;在做回归预测时,一般采用 平均值法 KNN三要素: 在KNN的算法中,主要考虑以下三个要素: K值的选择 :表示样本可由距离其最近的K个邻居来代替;可由 交叉验证 来选择最适合K值 当K值较小的时候,表示使用较小领域的样本进行预测,因此会导致模型更加复杂,导致过拟合; 当K值较大的时候,表示使用较大领域的样本进行预测,训练误差会增大,模型会简化,容易导致欠拟合 距离的度量: 一般使用欧式距离; 欧式距离:若 \(a(a_1,a_2,a_3)\) , \(b(b_1,b_2,b_3)\) ,则两者的欧式距离为: \[ \sqrt{(a1-b1)^2+(a2-b2)^2+(a2-b2)^2} \] 决策规则: 在 分类模型 中,主要使用多数表决或者加权多数表决法;在 回归模型 中,主要使用平均值法或者加权平均值法 多数表决/均值法:每个邻近样本权重相同; 加权多数表决/加权平均值法:每个邻近样本权重不同;一般情况下,采用权重和距离成反比的方式进行计算 KNN算法实现: 蛮力实现(brute) : 计算预测样本到所有训练集样本的距离

利用已有的大数据技术,如何构建机器学习平台

冷暖自知 提交于 2019-11-30 00:20:16
作者 | 冯煜策 编辑| Vincent AI前线出品| ID:ai-front 编者按:随着AI技术进一步发展,它将与越来越多的传统行业结合。作为新兴技术,AI的人才市场开始出现供不应求,新技术总有一定的壁垒,需要自我学习和用项目实践来掌握。技术的更替常常猝不及防,例如现在的TensorFlow和前两年Spark,刚掌握好能熟练运用Spark了,主流又开始跟进TensorFlow了。技术人需要学习成本,企业项目开发也要考虑新技术采纳时间。有什么办法能在企业已有的大数据平台经验基础上进行AI开发?同程利用Spark对机器学习平台的思考和实现过程值得借鉴。 机器如何学习? 人脑具备不断积累经验的能力,依赖经验我们便具备了分析处理的能力,比如我们要去菜场挑一个西瓜,别人或者自己的经验告诉我们色泽青绿、根蒂蜷缩、纹路清晰、敲声浑响的西瓜比较好吃。 我们具备这样的能力,那么机器呢?机器不是只接收指令,处理指令吗?和人脑类似,可以喂给机器历史数据,机器依赖建模算法生成模型,根据模型便可以处新的数据得到未知属性。以下便是机器学习与人脑归纳经验的类别图: 平台设想 在同程内部,我们对应用机器学习的一些团队做了了解,发现他们普遍的处理步骤如下: 这个过程中存在一些痛点: 线上数据到线下搬运耗时 训练数据量难均衡,如果训练数据量较大,用 R 或者 Python 做单机训练将会非常耗时

交叉验证 网格搜索笔记

跟風遠走 提交于 2019-11-29 13:29:06
交叉验证 https://sklearn.apachecn.org/docs/0.21.3/30.html cross_val_score >> > from sklearn . model_selection import cross_val_score >> > clf = svm . SVC ( kernel = 'linear' , C = 1 ) >> > scores = cross_val_score ( clf , iris . data , iris . target , cv = 5 ) >> > scores array ( [ 0.96 . . . , 1 . . . . , 0.96 . . . , 0.96 . . . , 1 . ] ) >> > from sklearn import metrics >> > scores = cross_val_score ( . . . clf , iris . data , iris . target , cv = 5 , scoring = 'f1_macro' ) >> > scores array ( [ 0.96 . . . , 1 . . . . , 0.96 . . . , 0.96 . . . , 1 . ] ) >> from sklearn . pipeline import make

机器学习简介

我是研究僧i 提交于 2019-11-28 09:41:56
主要内容 • 机器学习的概念 • 机器学习主要分类 • 监督 学习 三要素 • 监督学习模型评估策略 • 监督学习模型求解算法 一、机器学习的概念 • 机器学习 是什么 • 机器学习的开端 • 机器学习的定义 • 机器学习的过程 • 机器学习示例 机器学习是什么 • 什么是学习 – 从人的学习说起 – 学习理论 ;从实践经验中 总结 – 在理论上推导;在实践中检验 – 通过各种手段获取知识或技能的过程 • 机器怎么学习? – 处理某个特定的任务,以大量的“经验”为基础 – 对任务完成的好坏,给予一定的评判标准 – 通过分析经验数据,任务完成得更好了 机器学习的定义 • 机器学习 (Machine Learning, ML) 主要研究 计算机系统 对于特定任务的性能, 逐步 进行 改善的算法和统计模型 。 • 通过输入海量训练数据对模型进行训练,使模型掌握数据所蕴含的潜在规律,进而对新输入的数据进行准确的分类或预测 。 • 是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸优化、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。 机器学习的过程 二 、机器学习的分类 • 机器学习的主要分类 • 无监督学习 • 无监督学习应用 • 监督学习 • 监督学习应用 机器学习主要分类 • 有监督学习

集成算法

亡梦爱人 提交于 2019-11-28 03:13:32
我们以泰坦尼克号的获救信息为列 第一步:读取数据 import pandas as pd import numpy as np titanic = pd.read_csv('titanic_train.csv') #输出统计值 print(titanic.describe()) 第二步:数据准备 1.对于数字型缺失,我们使用均值来填充缺失值,对于字母型缺失, 我们使用出现概率最大的字母来填充缺失值 2.为了便于计算我们需要把字母类型,转换为数字类型 #使用均值填充缺失值 titanic['Age'] = titanic['Age'].fillna(titanic['Age'].median()) #输出其中的类别 print(titanic['Sex'].unique()) #.loc取出对应的数据,前面一个参数是索引,后面是对应的属性,将字符串转换为数字类型 titanic.loc[titanic['Sex']=='male', "Sex"] = 0 titanic.loc[titanic['Sex']=='female', "Sex"] = 1 print(titanic['Embarked'].unique()) #存在缺失值, 字母的话,用出现次数最多的S补齐 titanic['Embarked'] = titanic['Embarked'].fillna('S')

Python每日一记21>>>交叉验证

為{幸葍}努か 提交于 2019-11-27 12:45:47
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/weixin_44663675/article/details/88736723 还记的前期我们对机器学习的数据集的划分都是利用train_test_split()将数据划分为训练集和测试集,而且各自的比例是我们指定的,但是这样具有的人为性可能导致模型的泛化能力不佳。 交叉验证就是为了解决这个问题: 1、简单交叉验证(K折交叉验证):其将数据集划分为几个部分(注意不是随即划分,而是依次划分),再进行建模和测试。如我们制定数据集划分为3个子集,分为1,2,3;然后对1和2建模,再在3上进行测试,得分取平均值;再对1,3建模,在2上测试,以此类推。这样得到的结果更具普遍性和随机性,模型的泛化能力就更佳。需要的函数是cross_val_score form sklearn.model_selection import cross_val_score form sklearn.datasets import load_iris form sklearn.liner_model import LogisticRegression data=load_iris() logr=LogisticRegression() score

K折交叉验证

耗尽温柔 提交于 2019-11-27 05:45:28
K折交叉验证实现 StratifiedKFold用法类似Kfold,但是他是分层采样,确保训练集,测试集中各类别样本的比例与原始数据集中相同。 from sklearn.model_selection import StratifiedKFold kf = StratifiedKFold(n_splits=3, shuffle=True, random_state=2019)# 3折交叉 purchase_result=0 #最终结果 for train_index, test_index in kf.split(data,lable_purchase): #data为训练集,lable_purchase是lable X_train_p, y_train_p = data.iloc[train_index], lable_purchase.iloc[train_index] X_valid_p, y_valid_p = data.iloc[test_index], lable_purchase.iloc[test_index] purchase_result +=xgb_model(X_train_p, X_valid_p, y_train_p, y_valid_p, test)/3.0 print(purchase_result) 来源: https://blog.csdn

机器学习中的过拟合和欠拟合及交叉验证

◇◆丶佛笑我妖孽 提交于 2019-11-27 04:04:28
机器学习中的过拟合和欠拟合 1、机器学习算法对于整体的数据训练和拟合,以典型的多元线性回归的方式为例,通过设定拟合的最高次数,然后对比输出的曲线结果可以看出, 随着拟合函数次数的增大,其拟合线性回归模型的R2的值在不断地增大,均方差也在不断地减小,看起来拟合的结果越来越准确,其实质只是对于所存在原始数据的拟合误差越来越小,而对于新的数据样本则并不一定适合 , 这就是说存在 过拟合(overfitting) 的现象 ;而如果设定的 多项式次数太小,又会使得整体的R2值太小,均方误差太大,从而使得拟合结果不足,这又是 欠拟合(under fitting) 的情况 。 其中过拟合和欠拟合的输出准确度一般可以用均方差来进行对比和衡量, 将不同机器学习算法的学习曲线定义为函数输出 如下所示: #将不同的机器学习算法的学习曲线封装成为函数可以方便输出def plot_learning_curve(algo,x_train,x_test,y_train,y_test): train_score = [] test_score = [] for i in range(1, len(x_train)): algo.fit(x_train[:i], y_train[:i]) y_train_pre = algo.predict(x_train[:i]) y_test_pre =algo.predict