housing.head()
housing.info()
housing[“ocean_proximity”].value_counts()
housing.describe()
.
iloc方法,另一种方法是loc方法。loc是指location的意思,iloc中的i是指integer。
loc是根据index来索引对应的行。iloc并不是根据index来索引,而是根据行号0-n来索引
fit_transform() 用于 2D 数组,而 housing_cat_encoded 是一个 1D 数组,所以需要将其变形
reshape(-1,1)之后,数据集变成了一列,reshape(1,-1)也就是直接变成了一行。
-1被理解为unspecified value,意思是未指定为给定的。可以理解为一个正整数通配符,它代替任何整数。
对于一个线性模型,正则化的典型实现就是约束模型中参数的权重。
岭回归(也称为 Tikhonov 正则化) 是线性回归的正则化版:在损失函数上直接加上一个正则 项
Lasso 回归(也称 Least Absolute Shrinkage,或者 Selection Operator Regression) 另一种正则化版的线性回归:就像岭回归那样,它也在损失函数上添加了一个正则化项,但是它使用权重向量的 范数而不是权重向量 范数平方的一半。
弹性网络(ElasticNet)介于 Ridge 回归和 Lasso 回归之间。它的正则项是 Ridge 回归和 Lasso 回归正则项的简单混合,同时你可以控制它们的混合率 r,当 r=0时,弹性网络就是 Ridge 回归,当 r=1时,其就是 Lasso 回归。
通常你应该避免使用简单的线性回归。岭回归是一个很好的首选项,但是
如果你的特征仅有少数是真正有用的,你应该选择 Lasso 和弹性网络。
y = (iris[“target”] == 2).astype(np.int)
判断类型,若为Virginica则为true,并转换为1
predict_proba返回的是一个 n 行 k 列的数组, 第 i 行 第 j 列上的数值是模型预测 第 i 个预测样本为某个标签的概率,并且每一行的概率和为1。
返回预测标签
print(clf.predict(x_test))
返回预测属于某标签的概率
print(clf.predict_proba(x_test))
在 Scikit-Learn 的 LogisticRegression 模型中控制正则化强度的超参数不是 (与其他线
性模型一样) ,而是它的逆: 。 的值越大,模型正则化强度越低。
当只有两个类时,交叉熵损失函数等同于 Logistic 回归的损失函数(对数
损失;
如果 SVM 模型过拟合,你可以尝试通过减小超参数 C 去调整。较小的 C 会导致更宽的“街道”,但更多的间隔违规。
DBN:https://www.bayesserver.com/docs/introduction/getting-started
决策树的众多特性之一就是, 它不需要太多的数据预处理, 尤其是不需要进行特征的缩
放或者归一化。
节点的 Gini 属性用于测量它的纯度:如果一个节点包含的所有训练样例全都是同一类
别的,我们就说这个节点是纯的(Gini=0 ) 。
Scikit-Learn 用的是 CART 算法, CART 算法仅产生二叉树:每一个非叶节点总是只有
两个子节点(只有是或否两个结果) 。然而,像 ID3 这样的算法可以产生超过两个子节
点的决策树模型。
决策树几乎不对训练数据做任何假设(于此相反的是线性回归等模型,这类模型通常会假设数据是符合线性关系的) 。
如果不添加约束,树结构模型通常将根据训练数据调整自己,使自身能够很好的拟合数据,而这种情况下大多数会导致模型过拟合。
这一类的模型通常会被称为非参数模型,这不是因为它没有任何参数(通常也有很多) ,**而是因为在训练之前没有确定参数的具体数量,所以模型结构可以根据数据的特性自由生长。**于此相反的是,像线性回归这样的参数模型有事先设定好的参数数量,所以自由度是受限的,这就减少了过拟合的风险(但是增加了欠拟合的风险) 。
由于 Scikit-Learn 的训练算法是非常随机的,即使是相同的训练数据你也可能得到差别很大的模型(除非你设置了随机数种子)
一种
决策树的集成就叫做随机森林,它除了简单之外也是现今存在的最强大的机器学习算法之一。
Bagging 和 Pasting 都允许在多个分类器上对训练集进行多次采样,但只有Bagging 允许对同一种分类器上对训练集进行进行多次采样。
提升(Boosting,最初称为假设增强) 指的是可以将几个弱学习者组合成强学习者的集成方法。对于大多数的提升方法的思想就是按顺序去训练分类器,每一个都要尝试修正前面的分类。
主成分分析(Principal Component Analysis) 是目前为止最流行的降维算法。首先它找到接近数据集分布的超平面,然后将所有的数据都投影到这个超平面上。
PCA 假定数据集以原点为中心。首先要先对数据做中心化处理。
与逻辑斯蒂回归分类器相反,感知机不输出类概率,而是基于硬阈值进行预测。这是
你喜欢逻辑斯蒂回归很好的一个理由。
ReLU (z) = max (0, z) 。它是连续的,但不幸的是在 z=0 时不可微(斜率突然改变,这可以使梯度下降反弹) 。然而,在实践中,它工作得很好,并且具有快速计算的优点。最重要的是,它没有最大输出值的事实也有助于减少梯度下降期间的一些问题
第一步是建设阶段,构建 TensorFlow图。 第二步是执行阶段,您实际运行计算图谱来训练模型。
.构造阶段:首先我们需要导入 tensorflow 库。 然后我们必须指定输入和输出的数量,并设置每个层中隐藏的神经元数量:
n_inputs = 28*28 # MNIST
n_hidden1 = 300
n_hidden2 = 100
n_outputs = 10
不知道每个训练批次将包含多少个实例。 所以 X 的形状是 (None, n_inputs)
回归任务,您完全可以不使用激活函数。
梯度消失问题或梯度爆炸;训练将非常缓慢。;具有数百万参数的模型将会有严重的过拟合训练集的风险。
ReLU激活功能并不完美。 它有一个被称为 “ReLU 死区” 的问题:在训练过程中,一些神经元有效地死亡,意味着它们停止输出 0 以外的任何东西。在某些情况下,你可能会发现你网络的一半神经元已经死亡,特别是如果你使用大学习率。 使用 ReLU 函数的一个变体,比如 leaky ReLU
批量标准化(Batch Normalization,BN) 的技术来解决梯度消失/爆炸问题,
几乎总是应该使用 Adam_optimization,动量优化很关心以前的梯度:
Adam,代表自适应矩估计,结合了动量优化和 RMSProp 的思想:就像动量优化一样,它追踪过去梯度的指数衰减平均值,就像 RMSProp 一样,它跟踪过去平方梯度的指数衰减平均值。
Adam 是一种自适应学习率算法(如 AdaGrad 和 RMSProp) ,所以对学习率超参数 η 的调整较少。 您经常可以使用默认值 η= 0.001 ,使 Adam 更容易使用相对于梯度降。
神经元被dropout训练不能与其相邻的神经元共适应;他们必须尽可能让自己变得有用。最终对输入的微小变化会不太敏感。最后,你会得到一个更强大的网络,更好地推广。
数据增强,包括从现有的训练实例中产生新的训练实例,人为地增加了训练集的大小。 这将减少过拟合,使之成为正则化技术。 诀窍是生成逼真的训练实例
CNN 最重要的组成部分是卷积层:第一卷积层中的神经元不是连接到输入图像中的每一个像素,而是仅仅连接到它们的局部感受野中的像素 。 进而,第二卷积层中的每个神经元只与位于第一层中的小矩形内的神经元连接。 这种架构允许网络专注于第一隐藏层中的低级特征,然后将其组装成下一隐藏层中的高级特征
特征地图中的所有神经元共享相同的参数会显着减少模型中的参数数量,但最重要的是,一旦 CNN 学会识别一个位置的模式,就可以在任何其他位置识别它。 相比之下,一旦一个常规 DNN 学会识别一个位置的模式,它只能在该特定位置识别它。
池化层很容易掌握。 他们的目标是对输入图像进行二次抽样(即收缩) 以减少计算负担,内存使用量和参数数量(从而限制过度拟合的风险) 。 减少输入图像的大小也使得神经网络容忍一点点的图像变换(位置不变) 。
汇集的神经元没有权重; 它所做的只是使用聚合函数(如最大值或平均值) 来聚合输入。注意,只有每个核中的最大输入值才会进入下一层。 其他输入被丢弃。
这显然是一个非常具有破坏性的层:即使只有一个 2×2 的核和 2 的步幅,输出在两个方向上都会减小两倍(所以它的面积将减少四倍) ,一下减少了 75% 的输入值
典型的 CNN 体系结构有一些卷积层(每一个通常跟着一个 ReLU 层) ,然后是一个池化层,然后是另外几个卷积层(+ ReLU) ,然后是另一个池化层,等等。 随着网络的进展,图像变得越来越小,但是由于卷积层的缘故,图像通常也会越来越深(即更多的特征映射) 。 在堆栈的顶部,添加由几个全连接层(+ ReLU) 组成的常规前馈神经网络,并且最终层输出预测(例如,输出估计类别概率的 softmax 层)
一个常见的错误是使用太大的卷积核。 通常可以通过将两个 3×3 内核堆叠在一起来获得与 9×9 内核相同的效果,计算量更少。