• 一 实例描述通过增加数据集的方式来改善过拟合情况，这里每次循环生成1000个数据。二 代码import tensorflow as tf import numpy as np import matplotlib.pyplot as plt from sklearn.utils import shuffle from ...
一 实例描述通过增加数据集的方式来改善过拟合情况，这里每次循环生成1000个数据。二 代码import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
from sklearn.utils import shuffle
from matplotlib.colors import colorConverter, ListedColormap
# 对于上面的fit可以这么扩展变成动态的
from sklearn.preprocessing import OneHotEncoder
def onehot(y,start,end):
ohe = OneHotEncoder()
a = np.linspace(start,end-1,end-start)
b =np.reshape(a,[-1,1]).astype(np.int32)
ohe.fit(b)
c=ohe.transform(y).toarray()
return c

def generate(sample_size, num_classes, diff,regression=False):
np.random.seed(10)
mean = np.random.randn(2)
cov = np.eye(2)

#len(diff)
samples_per_class = int(sample_size/num_classes)
X0 = np.random.multivariate_normal(mean, cov, samples_per_class)
Y0 = np.zeros(samples_per_class)

for ci, d in enumerate(diff):
X1 = np.random.multivariate_normal(mean+d, cov, samples_per_class)
Y1 = (ci+1)*np.ones(samples_per_class)

X0 = np.concatenate((X0,X1))
Y0 = np.concatenate((Y0,Y1))

if regression==False: #one-hot  0 into the vector "1 0
Y0 = np.reshape(Y0,[-1,1])
#print(Y0.astype(np.int32))
Y0 = onehot(Y0.astype(np.int32),0,num_classes)
#print(Y0)
X, Y = shuffle(X0, Y0)
#print(X, Y)
return X,Y

# Ensure we always get the same amount of randomness
np.random.seed(10)
input_dim = 2
num_classes =4
X, Y = generate(120,num_classes,  [[3.0,0],[3.0,3.0],[0,3.0]],True)
Y=Y%2
colors = ['r' if l == 0.0 else 'b' for l in Y[:]]
plt.scatter(X[:,0], X[:,1], c=colors)
plt.xlabel("Scaled age (in yrs)")
plt.ylabel("Tumor size (in cm)")
plt.show()
Y=np.reshape(Y,[-1,1])
learning_rate = 1e-4
n_input  = 2
n_label  = 1
n_hidden = 200
x = tf.placeholder(tf.float32, [None,n_input])
y = tf.placeholder(tf.float32, [None, n_label])
weights = {
'h1': tf.Variable(tf.truncated_normal([n_input, n_hidden], stddev=0.1)),
'h2': tf.Variable(tf.random_normal([n_hidden, n_label], stddev=0.1))
}
biases = {
'h1': tf.Variable(tf.zeros([n_hidden])),
'h2': tf.Variable(tf.zeros([n_label]))
}
#Leaky relus
y_pred = tf.maximum(layer2,0.01*layer2)
reg = 0.01
loss=tf.reduce_mean((y_pred-y)**2)+tf.nn.l2_loss(weights['h1'])*reg+tf.nn.l2_loss(weights['h2'])*reg
#加载
sess = tf.InteractiveSession()
sess.run(tf.global_variables_initializer())

for i in range(20000):
X, Y = generate(1000,num_classes,  [[3.0,0],[3.0,3.0],[0,3.0]],True)
Y=Y%2
Y=np.reshape(Y,[-1,1])

_, loss_val = sess.run([train_step, loss], feed_dict={x: X, y: Y})

if i % 1000 == 0:
print ("Step:", i, "Current loss:", loss_val)
colors = ['r' if l == 0.0 else 'b' for l in Y[:]]
plt.scatter(X[:,0], X[:,1], c=colors)
plt.xlabel("Scaled age (in yrs)")
plt.ylabel("Tumor size (in cm)")

nb_of_xs = 200
xs1 = np.linspace(-1, 8, num=nb_of_xs)
xs2 = np.linspace(-1, 8, num=nb_of_xs)
xx, yy = np.meshgrid(xs1, xs2) # create the grid
# Initialize and fill the classification plane
classification_plane = np.zeros((nb_of_xs, nb_of_xs))
for i in range(nb_of_xs):
for j in range(nb_of_xs):
#classification_plane[i,j] = nn_predict(xx[i,j], yy[i,j])
classification_plane[i,j] = sess.run(y_pred, feed_dict={x: [[ xx[i,j], yy[i,j] ]]} )
classification_plane[i,j] = int(classification_plane[i,j])
# Create a color map to show the classification colors of each grid point
cmap = ListedColormap([
colorConverter.to_rgba('r', alpha=0.30),
colorConverter.to_rgba('b', alpha=0.30)])
# Plot the classification plane with decision boundary and input samples
plt.contourf(xx, yy, classification_plane, cmap=cmap)
plt.show()
xTrain, yTrain = generate(12,num_classes,  [[3.0,0],[3.0,3.0],[0,3.0]],True)
yTrain=yTrain%2
colors = ['r' if l == 0.0 else 'b' for l in yTrain[:]]
plt.scatter(xTrain[:,0], xTrain[:,1], c=colors)
plt.xlabel("Scaled age (in yrs)")
plt.ylabel("Tumor size (in cm)")
#plt.show()
yTrain=np.reshape(yTrain,[-1,1])
print ("loss:\n", sess.run(loss, feed_dict={x: xTrain, y: yTrain}))
nb_of_xs = 200
xs1 = np.linspace(-1, 8, num=nb_of_xs)
xs2 = np.linspace(-1, 8, num=nb_of_xs)
xx, yy = np.meshgrid(xs1, xs2) # create the grid
# Initialize and fill the classification plane
classification_plane = np.zeros((nb_of_xs, nb_of_xs))
for i in range(nb_of_xs):
for j in range(nb_of_xs):
#classification_plane[i,j] = nn_predict(xx[i,j], yy[i,j])
classification_plane[i,j] = sess.run(y_pred, feed_dict={x: [[ xx[i,j], yy[i,j] ]]} )
classification_plane[i,j] = int(classification_plane[i,j])
# Create a color map to show the classification colors of each grid point
cmap = ListedColormap([
colorConverter.to_rgba('r', alpha=0.30),
colorConverter.to_rgba('b', alpha=0.30)])
# Plot the classification plane with decision boundary and input samples
plt.contourf(xx, yy, classification_plane, cmap=cmap)
plt.show()   三 运行结果四 说明这次得到的模型测试值直接降到了0.9，比训练时还低。
展开全文
• ## 过拟合和欠拟合的形象解释

万次阅读 多人点赞 2019-03-19 10:39:03
过拟合就是训练的时候效果很好损失函数值可以降得很低，但是到测试数据集的时候表现就不那么好了，就是过分依赖于现有训练数据集的特征造成的，可以加大数据集来进行训练，比如在图像领域可以通过拉伸旋转变换剪裁...
今天突然被以前同学人问到机器学习中的’过拟合‘和‘欠拟合’是什么意思呢？

“过拟合就是训练的时候效果很好，损失函数值可以降得很低，但是到测试数据集的时候表现就不那么好了，原因是过分依赖于现有训练数据集的特征造成的，解决方法是可以加大数据集来进行训练。比如在图像领域可以通过拉伸旋转变换剪裁等等方式来增加训练数据集然后通过Dropout随机清零参数来避免.......“。巴拉巴拉讲了一堆，虽然我很想解释明白，但是.......总感觉有苦说不出的憋屈，最后：

这让我意识到我可能太过于沉浸于自己的世界了，没有考虑到别人的感受，我回来后寻思着不对，对于没有接触过机器学习这一块的人来说很多名词可能就听不太懂，我不能用太多的专业词，我要用最直白的语言解释，于是产生了这篇博客。

--------------------以下进行正经的解释----------------------

拟合（Fitting）：就是说这个曲线能不能很好的描述某些样本，并且有比较好的泛化能力。

过拟合（Overfitting）：就是太过贴近于训练数据的特征了，在训练集上表现非常优秀，近乎完美的预测/区分了所有的数据，但是在新的测试集上却表现平平，不具泛化性，拿到新样本后没有办法去准确的判断。

下面给一个代码中实际的运行结果感受一下：

欠拟合（UnderFitting）：测试样本的特性没有学到，或者是模型过于简单无法拟合或区分样本。

直观解释：

解决过拟合的方法：增大数据量，正则化（L1,L2），丢弃法Dropout（把其中的一些神经元去掉只用部分神经元去构建神经网络）

解决欠拟合的方法：优化模型，一般是模型过于简单无法描述样本的特性。

-----------------------------------正经解释完毕，以下是非正经解释----------------------------------

就好比你喜欢一个女生，这个女生有着自己的习性，为了追到这个女生我们经常会去迎合这个女生的习性。比如喝温水有固定的温度、挂电话只能她先挂、出去逛街不能哔哔太累、看书只能用书签不能折页........，这个就是我们学到的‘经验’。但是！万一也许可能这个女生某一天觉得你没有足够关心她每天都忙于自己的事情就和你分手啦.....

然后，当你再找女朋友时，你拿出这些 ‘经验’ 但是好像发现效果并不好，因为每个女生的习性和喜好都不一样，所以你就陷入过拟合。

怎么解决过拟合呢？那就是多交几个女朋友（增大训练数据量）啦！多了解一些不同女生的习性和喜好，当你已经把全世界所有女生的习性和喜好都学过之后，还有你追不到的女朋友吗？ 但是，现实很残酷的，哪有那么多女朋友来供你学习的，你还可以选择丢弃法（Dropout），就是选择性的学习女朋友的喜好和习性，这样就会有概率学不到只属于她“个人癖好”的部分，你学到的就会更加具有普适性。

如何解释欠拟合...，那就简单了，就是你第一个女朋友都没追到，她的习性和喜好你还没能完全掌握。

那么怎么解决欠拟合呢？那就只能提升你自己的人格魅力了（模型复杂度），这个我也没什么资格指点，毕竟我也是凭实力单身多年，想必在座的各位应该都比我厉害。

完美拟合，当你在追第一个女朋友的时候，你自身有一定的人格魅力（模型复杂度），并且并没有完全去迎合她的习性，毕竟存在 ‘个人癖好’ 这个‘错误’习性，你学到的是有泛化性的女生习性特征，当你用这些特征再去追女生的时候，成功率就很高了！


展开全文
• ## 机器学习：什么是欠拟合和过拟合

万次阅读 多人点赞 2019-07-27 11:25:32
1. 什么是欠拟合和过拟合 先看三张图片，这三张图片是线性回归模型 拟合的函数和训练的关系 第一张图片拟合的函数和训练误差较大，我们称这种情况为欠拟合 第二张图片拟合的函数和训练误差较小，我们称这种...
1. 什么是欠拟合和过拟合

先看三张图片，这三张图片是线性回归模型 拟合的函数和训练集的关系

第一张图片拟合的函数和训练集误差较大，我们称这种情况为 欠拟合
第二张图片拟合的函数和训练集误差较小，我们称这种情况为 合适拟合
第三张图片拟合的函数完美的匹配训练集数据，我们称这种情况为 过拟合

类似的，对于逻辑回归同样也存在欠拟合和过拟合问题，如下三张图

2. 如何解决欠拟合和过拟合问题

欠拟合问题，根本的原因是特征维度过少，导致拟合的函数无法满足训练集，误差较大。

欠拟合问题可以通过增加特征维度来解决。

过拟合问题，根本的原因则是特征维度过多，导致拟合的函数完美的经过训练集，但是对新数据的预测结果则较差。

解决过拟合问题，则有2个途径：

减少特征维度; 可以人工选择保留的特征，或者模型选择算法
正则化; 保留所有的特征，通过降低参数θ的值，来影响模型
3. 正则化

回到前面过拟合例子, h(x) = θ0 + θ1x1 + θ2x2 + θ3x3 + θ4x4

从图中可以看出，解决这个过拟合问题可以通过消除特征x3和x4的影响, 我们称为对参数的惩罚, 也就是使得参数θ3, θ4接近于0。

最简单的方法是对代价函数进行改造，例如

这样在求解最小化代价函数的时候使得参数θ3, θ4接近于0。

正则化其实就是通过对参数θ的惩罚来影响整个模型

4. 线性回归使用正则化

前面几篇文章中，线性回归的代价函数J(θ)表达式如下

正则化后，代价函数J(θ)表达式如下，注意j从1开始

注意λ值不能设置过大，否则会导致求出的参数除了θ0，其它θ1,θ2 ... θn值约等于0，导致预测函数h(x)出现极大偏差

我们的目标依然是求J(θ)最小值，我们还是用梯度下降算法和正规方程求解最小化J(θ)

1. 梯度下降算法(注意需要区分θ0和其它参数的更新等式)

2. 正规方程

对于正规方程来，需要修改等式如下

系数λ 所乘的矩阵为 (n+1)*(n+1)维

5. 逻辑回归使用正则化

和线性回归模型类型，逻辑回归也可以通过正则化来解决过拟合问题。

逻辑回归的代价函数J(θ)表达式如下

正则化逻辑回归的代价函数，是在等式后加上一项，注意j从1开始

同样的用梯度下降算法求解最小化J(θ)，也需要做改变

不同的是逻辑回归模型中的预测函数 h(x)和线性回归不同

“无意中发现了一个巨牛的人工智能教程，忍不住分享一下给大家。教程不仅是零基础，通俗易懂，而且非常风趣幽默，像看小说一样！觉得太牛了，所以分享给大家。点这里可以跳转到教程。”


展开全文
• 什么是过拟合过拟合也就是泛化能力差。 怎么判断是不是过拟合？ 训练时准确率高，验证时准确率低。 过拟合产生的原因： 1.神经网络的学习能力强，复杂度过高。 2.训练时间太久。 3.激活函数不合适。 4....
什么是过拟合？
过拟合也就是泛化能力差
怎么判断是不是过拟合？
训练时准确率高，验证时准确率低。
过拟合产生的原因：
1.神经网络的学习能力过强，复杂度过高
2.训练时间太久
3.激活函数不合适
4.数据量太少
解决办法:
1.降低模型复杂度，dropout
2.即时停止
3.正则化
4.数据增强


展开全文
• ## 欠拟合和过拟合

千次阅读 2016-03-05 15:08:52
拟合：模型拟合不够，在训练集上...2、特征集少、数据集过少、抽样数据不合理 过拟合原因及解决办法： 1、模型过于复杂-》减少模型复杂度，增加正则化项，L1范数或L2范数 2、特征选取不合理-》人工筛选特征
• 1 什么是过拟合通俗的来讲，过拟合就是对训练学的太好了。当在训练上成功率增加而在测试上成功率减少，那么就认为出现了过拟合。一般来说，出现过拟合是训练样本少而需要训练的参数过多解决过拟合的办法： ...
• 过拟合即模型在训练过程中对模型参数进行拟合的过程中，由于训练数据集存在抽样误差（噪声），复杂的模型在训练的过程中会将抽样误差也一同进行拟合。这就导致训练好的模型在训练集上的表现很好，在测试集上的表现很...
• 现在直接对数据集的特征进行遍历，并分析过拟合情况。 https://blog.csdn.net/weixin_42567027/article/details/107488666 数据集 代码 // An highlighted block import numpy as np import pandas as pd import ...
• 过拟合和欠拟合的问题之前区分，一般的理解是：
• 其直观的表现如下图所示，随着训练过程的进行，模型复杂度增加，在training data上的error渐渐减小，但是在验证上的error却反而渐渐增大——因为训练出来的网络过拟合了训练，对训练外的数据却不work。...
• ## 怎么解决过拟合与欠拟合

万次阅读 多人点赞 2018-03-07 22:31:21
一.过拟合 在训练数据不够多时，或者over-training时，经常会导致over-fitting（过拟合）。其直观的表现如下图所所示。 随着训练过程的进行，模型...在机器学习算法中，我们经常将原始数据集分为三部分：训练...
• 过拟合原因： 由于训练数据包含抽样误差，训练时，复杂的模型将抽样误差也考虑在内，将抽样误差也进行了很好的拟合，如 1、比如数据不够， ...根据当前数据集生成数据 2.使用合适的模型  ...
• ## 过拟合

千次阅读 2018-12-13 17:10:08
过拟合：模型过于复杂，在训练上面的拟合效果非常好 甚至可以达到损失为0 但是在测试拟合效果很不好 欠拟合： 模型过于简单 在训练集和测试拟合的效果都不好 例： sin曲线拟合  数据产生模型是由...
• 过拟合数据不平衡 什么是过拟合过拟合就是学习器对训练样本数据的学习的过于彻底，将一些训练样本的噪声或者不属于全体样本的一般特征也学习了，造成在训练样本上效果表现很好而在测试样本上表现效果非常...
• 拟合和过拟合一直是机器学习训练中的难题，在进行模型训练的时候往往要对这二者进行权衡，使得模型不仅在训练上表现良好，在验证以及测试上也要有出色的预测能力。 解决欠拟合(高偏差)的方法 1.模型复杂化...
• 深度学习中的欠拟合和过拟合简介
• DL之DNN：利用MultiLayerNetExtend模型【6*100+ReLU+SGD,dropout】对Mnist数据集训练来抑制过拟合 目录 输出结果 设计思路 核心代码 更多输出 输出结果 设计思路 190417更新 核心...
• 1. 什么是欠拟合和过拟合 先看三张图片，这三张图片是线性回归模型 拟合的函数和训练的关系 第一张图片拟合的函数和训练误差较大，我们称这种情况为 欠拟合 第二张图片拟合的函数和训练误差较小，我们称...
• 泛化是指模型很好地拟合以前未见的新数据（从用于创建该模型的同一分布中抽取）的能力。 过拟合过拟合模型在训练过程中产生的损失很低，但在预测新数据方面的表现却非常糟糕，即泛化能力差； 产生原因：...
• 上次提到了通过划分数据集为训练集测试集，并不断迭代训练模型，通过测试集对模型进行评估，进而不断调整超参数，来解决过拟合问题。 但是还会出现问题 按数据集分成训练集测试集不断迭代训练模型的方式，...
• 过拟合(overfitting)”如果我们拟合一个非常复杂的分类器,比如深度神经网络或者含有隐藏神经的神经网络,可能就非常适用于这个数据集,但是这看起来不是一种很好的拟合方式,分类器方差较高,数据过度拟合 适...
• 拟合和过拟合实践中，如果测试数据集是给定的，我们通常用机器学习模型在该测试数据集的误差来反映泛化误差。基于上述重要结论，以下两种拟合问题值得注意：欠拟合：机器学习模型无法得到较低训练误差。拟合：...
• 数据集太小，无法了解其真实分布。 模型的迭代次数过多。 解决办法 增加训练数据，做数据增强。 降低模型复杂度。 减少特征数。 添加正则化约束。 使用BN。 使用DropOut 提前结束训练。 欠拟合 原因
• 拟合和过拟合 训练误差和泛化误差 机器学习模型在训练数据集上表现出的误差叫做训练误差，在任意一个测试数据样本上表现出的误差的期望值叫做泛化误差。 统计学习理论的一个假设是：训练数据集和测试数据集里...
• 过拟合（overfitting） 是指在模型参数拟合过程中的问题，由于训练数据包含抽样误差，训练时，复杂的模型将抽样误差也考虑在内，将抽样误差也进行了很好的拟合。具体表现就是最终模型在训练上效果好，而在测试上...
• 在机器学习或者深度神经网络中经常会出现：欠拟合和过拟合。 这些问题的出现原因以及解决之道如下文。 1.3 判断是否拟合 判断究模型否拟合方法： 1.4 拟合原因 （1）建模样本抽取错误，...
• 在我们机器学习或者训练深度神经网络的时候经常会出现欠拟合和过拟合这两个问题，但是，一开始我们的模型往往是欠拟合的，也正是因为如此才有了优化的空间，我们需要不断的调整算法来使得模型的表达能拿更强。...
• ## 过拟合和解决办法

千次阅读 2018-03-09 00:13:52
在我们训练模型的时候经常会遇到过拟合和欠拟合的问题。我们的模型一开始是欠拟合的，正因为如此，才会有优化的空间，需要不断的调整算法来使得模型的表达能力更强。但是优化到一定程度，就需要解决拟合问题了。1...
• 1、经验误差和拟合、欠...显然这部分知识是强加给测试的，我们称之为拟合欠拟合：顾名思义，你这个学习器学的不好，老师教的东西都没有掌握住，还得继续学，我们称之为欠拟合上面谈了欠拟合和过拟合，哪接下来...

...