如何构建训练集和测试集 成什么比例

柳天凝 装修达人 11

今天装修百科网给各位分享怎么放训练集的知识,其中也会对如何构建训练集和测试集 成什么比例(训练集和测试集比例如何选择)进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在我们开始吧!

如何构建训练集和测试集 成什么比例

分开训练集、测试集

然后,对训练集寻优,构建好决策函数

如何构建训练集和测试集 成什么比例

然后用测试集验证准确率,达到满足需要准确率后,就可以拿新数据分类啦~

spss二元逻辑回归的时不用区分训练集和测试集吗?

可以区分的,而且建议尽量要区分
但是有的时候也不会这么严谨的

如何构建训练集和测试集 成什么比例

[size=14.399999618530273px]做分类预测等数据挖掘任务时,需要测试所建立模型的准确性时,如没有事先划分好的训练集与测试集,常采用的方案有。
[size=14.399999618530273px] A. 随机划分数据集:将数据集随机划分成训练集和测试集,一般按照3:1的比例划分,其中3/4的数据集用于模型的建立,1/4数据集用于测试所建立模型的性能。最终模型的性能,通过K次随机划分数据集,可以得到K次划分的模型性能的平均值,作为建立模型的性能。
[size=14.399999618530273px] B. 交叉检验(Cross-Validation):交叉检验,是按一定的方式将数据集划分成训练集和测试集,每个数据记录既有作为训练集,又有作为测试集。常用的交叉检验有:
[size=14.399999618530273px] 》Leave One Out Cross-Validation:每次选择一个数据作为测试集,其余的N-1个作为训练集用于测试模型的性能,共执行N次测试,N次测试的结果作为最终模型的性能;
[size=14.399999618530273px] 》K-Fold Cross-Validation:将数据集划分成K份,每次是其中的k-1份作为训练集建立模型,剩余的1份作为测试集检测模型性能,共执行K次性能测试。常用的是10折交叉检验,或采用随机划分数据集法将数据集划分成K份,此时可采用K-ford M-time Cross-Validation。

python 神经网络库有哪些

学习人工智能时,我给自己定了一个目标--用Python写一个简单的神经网络。为了确保真得理解它,我要求自己不使用任何神经网络库,从头写起。多亏了Andrew Trask写得一篇精彩的博客,我做到了!下面贴出那九行代码:


在这篇文章中,我将解释我是如何做得,以便你可以写出你自己的。我将会提供一个长点的但是更完美的源代码。
首先,神经网络是什么?人脑由几千亿由突触相互连接的细胞(神经元)组成。突触传入足够的兴奋就会引起神经元的兴奋。这个过程被称为“思考”。

我们可以在计算机上写一个神经网络来模拟这个过程。不需要在生物分子水平模拟人脑,只需模拟更高层级的规则。我们使用矩阵(二维数据表格)这一数学工具,并且为了简单明了,只模拟一个有3个输入和一个输出的神经元。

我们将训练神经元解决下面的问题。前四个例子被称作训练集。你发现规律了吗?‘?’是0还是1?

你可能发现了,输出总是等于输入中最左列的值。所以‘?’应该是1。
训练过程
但是如何使我们的神经元回答正确呢?赋予每个输入一个权重,可以是一个正的或负的数字。拥有较大正(或负)权重的输入将决定神经元的输出。首先设置每个权重的初始值为一个随机数字,然后开始训练过程:
取一个训练样本的输入,使用权重调整它们,通过一个特殊的公式计算神经元的输出。
计算误差,即神经元的输出与训练样本中的期待输出之间的差值。
根据误差略微地调整权重。
重复这个过程1万次。

最终权重将会变为符合训练集的一个最优解。如果使用神经元考虑这种规律的一个新情形,它将会给出一个很棒的预测。
这个过程就是back propagation。

计算神经元输出的公式
你可能会想,计算神经元输出的公式是什么?首先,计算神经元输入的加权和,即

接着使之规范化,结果在0,1之间。为此使用一个数学函数--Sigmoid函数:


Sigmoid函数的图形是一条“S”状的曲线。

把第一个方程代入第二个,计算神经元输出的最终公式为:

你可能注意到了,为了简单,我们没有引入最低兴奋阈值。
调整权重的公式
我们在训练时不断调整权重。但是怎么调整呢?可以使用“Error Weighted Derivative”公式:

为什么使用这个公式?首先,我们想使调整和误差的大小成比例。其次,乘以输入(0或1),如果输入是0,权重就不会调整。最后,乘以Sigmoid曲线的斜率(图4)。为了理解最后一条,考虑这些:
我们使用Sigmoid曲线计算神经元的输出
如果输出是一个大的正(或负)数,这意味着神经元采用这种(或另一种)方式
从图四可以看出,在较大数值处,Sigmoid曲线斜率小
如果神经元认为当前权重是正确的,就不会对它进行很大调整。乘以Sigmoid曲线斜率便可以实现这一点
Sigmoid曲线的斜率可以通过求导得到:

把第二个等式代入第一个等式里,得到调整权重的最终公式:

当然有其他公式,它们可以使神经元学习得更快,但是这个公式的优点是非常简单。
构造Python代码
虽然我们没有使用神经网络库,但是将导入Python数学库numpy里的4个方法。分别是:
exp--自然指数
array--创建矩阵
dot--进行矩阵乘法
random--产生随机数
比如, 我们可以使用array()方法表示前面展示的训练集:

“.T”方法用于矩阵转置(行变列)。所以,计算机这样存储数字:

我觉得我们可以开始构建更优美的源代码了。给出这个源代码后,我会做一个总结。
我对每一行源代码都添加了注释来解释所有内容。注意在每次迭代时,我们同时处理所有训练集数据。所以变量都是矩阵(二维数据表格)。下面是一个用Python写地完整的示例代码。



结语
试着在命令行运行神经网络:

你应该看到这样的结果:

我们做到了!我们用Python构建了一个简单的神经网络!
首先神经网络对自己赋予随机权重,然后使用训练集训练自己。接着,它考虑一种新的情形[1, 0, 0]并且预测了0.99993704。正确答案是1。非常接近!
传统计算机程序通常不会学习。而神经网络却能自己学习,适应并对新情形做出反应,这是多么神奇,就像人类一样。

推荐系统为什么要分测试集和训练集

在信息检索、统计分类、识别、预测、翻译等领域,两个最基本指标是准确率和召回率,用来评价结果的质量。
准确率(Precision),又称“精度”、“正确率”、“查准率”,表示在检索到的所有文档中,检索到的相关文档所占的比例。
召回率(Recall),又称“查全率”,表示在所有相关文档中,检索到的相关文档所占的比率。
两者的公式为:
准确率 = 检索到的相关文档数量 / 检索到的所有文档总数
召回率 = 检索到的相关文档数量 / 系统中所有相关文档的总数
图示如下:

举例来说:一个数据库中有500个文档,其中有50个文档符合定义的问题。系统检索到75个文档,其中只有45个文档符合定义的问题。
准确率 = 45 / 75 = 60%
召回率 = 45 / 50 = 90%
若将所有文档都检索到,这些指标有何变化:
准确率 = 50 / 500 = 10%
召回率 = 50 / 50 = 100%
可见,准确率和召回率是相互影响的,理想情况下肯定是两者都高,但是一般情况下准确率高,召回率就低;召回率高,准确率就低;如果两者都低,那肯定是什么环节有问题了。
比如,在检索系统中,如果希望提高召回率,即希望更多的相关文档被检索到,就要放宽“检索策略”,便会在检索中伴随出现一些不相关的结果,从而影响到准确率。如果希望提高准确率,即希望去除检索结果中的不相关文档时,就需要严格“检索策略”,便会使一些相关文档不能被检索到,从而影响到召回率。
针对不同目的,如果是做搜索,那就是优先提高召回率,在保证召回率的情况下,提升准确率;如果做疾病监测、反垃圾,则是优先提高准确率,保准确率的条件下,提升召回率。

那么,在两者都要求高的情况下,如何综合衡量准确率和召回率呢?一般使用F值。
F-Measure是准确率(P)和召回率(R)的加权调和平均。公式为:

当参数α=1时,就是最常见的F1,即

可见F1综合了P和R的结果,可用于综合评价实验结果的质量。