过拟合

写给程序员的机器学习入门 (四)

南笙酒味 提交于 2020-05-08 15:39:22
这篇将会着重介绍使用 pytorch 进行机器学习训练过程中的一些常见技巧,掌握它们可以让你事半功倍。 使用的代码大部分会基于上一篇最后一个例子,即根据码农条件预测工资🙀,如果你没看上一篇请点击 这里 查看。 保存和读取模型状态 在 pytorch 中各种操作都是围绕 tensor 对象来的,模型的参数也是 tensor,如果我们把训练好的 tensor 保存到硬盘然后下次再从硬盘读取就可以直接使用了。 我们先来看看如何保存单个 tensor,以下代码运行在 python 的 REPL 中: # 引用 pytorch >>> import torch # 新建一个 tensor 对象 >>> a = torch.tensor([1, 2, 3], dtype=torch.float) # 保存 tensor 到文件 1.pt >>> torch.save(a, "1.pt") # 从文件 1.pt 读取 tensor >>> b = torch.load("1.pt") >>> b tensor([1., 2., 3.]) torch.save 保存 tensor 的时候会使用 python 的 pickle 格式,这个格式保证在不同的 python 版本间兼容,但不支持压缩内容,所以如果 tensor 非常大保存的文件将会占用很多空间,我们可以在保存前压缩

写给程序员的机器学习入门 (四)

对着背影说爱祢 提交于 2020-05-08 14:57:00
这篇将会着重介绍使用 pytorch 进行机器学习训练过程中的一些常见技巧,掌握它们可以让你事半功倍。 使用的代码大部分会基于上一篇最后一个例子,即根据码农条件预测工资🙀,如果你没看上一篇请点击 这里 查看。 保存和读取模型状态 在 pytorch 中各种操作都是围绕 tensor 对象来的,模型的参数也是 tensor,如果我们把训练好的 tensor 保存到硬盘然后下次再从硬盘读取就可以直接使用了。 我们先来看看如何保存单个 tensor,以下代码运行在 python 的 REPL 中: # 引用 pytorch >>> import torch # 新建一个 tensor 对象 >>> a = torch.tensor([1, 2, 3], dtype=torch.float) # 保存 tensor 到文件 1.pt >>> torch.save(a, "1.pt") # 从文件 1.pt 读取 tensor >>> b = torch.load("1.pt") >>> b tensor([1., 2., 3.]) torch.save 保存 tensor 的时候会使用 python 的 pickle 格式,这个格式保证在不同的 python 版本间兼容,但不支持压缩内容,所以如果 tensor 非常大保存的文件将会占用很多空间,我们可以在保存前压缩

Deep Convolutional Network Cascade for Facial Point Detection实践总结

点点圈 提交于 2020-05-08 08:06:08
测试代码:https://github.com/luoyetx/mini-caffe/tree/master (example中deeplandmark例子) 训练代码:https://github.com/luoyetx/deep-landmark 测试代码的配置参考:http://blog.csdn.net/xzzppp/article/details/68495341 训练代码,在配置好GPU版本caffe后,按github步骤,很好配置。 测试阶段: 一,用作者提供的正脸图像进行测试,发现效果较好,如下图所示: 二,思考:是不是对其他图片识别效果也不错,用其他图像进行测试,发现效果如下(贴出部分检测到的图片): 图片效果: 直观上看,关键点定位还行,人脸检测比较差,很多人脸检测不出,人脸检测用opencv实现的。 三,发现:有难度的基本没检测出来,解决方法两个思路:要么换个效果较好的检测器,要么手动截取人脸做landmark。我先手动截取人脸,输入到CNN网络中做landmark。 整图是我抠出的人脸,红色框是程序自带的缩小人脸中关键点检测范围。对于同一个图片,我抠出了不同大小的人脸。但效果测试下来不太理想,甚至比用自带检测器检测做的人脸关键点检测的demo的效果还差 四、分析和解决问题 分析:可能是检测器的问题,继续试验:对自带检测器检测到的人脸框,分别进行放大、缩小操作

比快更快——微软LightGBM

♀尐吖头ヾ 提交于 2020-05-08 00:21:00
###LightGBM介绍 xgboost是一种优秀的boosting框架,但是在使用过程中,其训练耗时过长,内存占用比较大。微软在2016年推出了另外一种boosting框架——lightgbm,在不降低准确度的的前提下,速度提升了10倍左右,占用内存下降了3倍左右。详细的实验结果参见: LightGBM experiment .其令人印象深刻的特点有: 将连续的特征值转化为离散的直方图,利用直方图进行节点的分裂,牺牲了一定的准确度换取了训练速度和内存空间的优化。 相对于xgboost的level—wise的生长策略,lightgbm使用了leaf-wise树生长策略。由于level-wise在分裂时,部分增益小的树也得到了增长,虽然容易控制误差,但是分裂有时是不合理的,而lightgbm使用level-wise,只在增益大的树上分裂生长,甚至对Feature f如果分裂无收益,那么后续也将不会对f计算。体现在参数上,xgboost使用max_depth,而lightgbm使用num_leaves控制过拟合。 直接支持了类别输入模型,无需对类别型的特征进行one-hot编码,lightgbm在参数categorial_feature中来指定数据中的类别特征列即可。 ###LightGBM调参 几个重要的参数调节: num_leaves 这是控制过拟合的参数

数据预处理:标准化,归一化,正则化

懵懂的女人 提交于 2020-05-07 13:29:18
1. 归一化(Normalization) 归一化 (Resaling) 一般是将数据映射到指定的范围,用于去除不同维度放入量纲以及量纲单位。常见的映射范围有 [ 0, -1 ] 和 [ -1, 1],最常见的归一化方法就是 Min-Max 归一化: 涉及距离度量、协方差计算时不能应用这种方法,因为这种线性等比例缩放无法消除量纲对方差、协方差的影响。 min_max_scaler = preprocessing . MinMaxScaler () data_T_minmax = min_max_scaler . fit_transform ( data . T ) data_minmax = data_T_minmax . T 2. 标准化(Standardization) 最常见的标准化方法:Z-Score 标准化。 其中μ是样本均值,σ是样本数据的标准差。 上图则是一个散点序列的标准化过程:原图 -> 减去均值 -> 除以标准差。 显而易见,变成了一个均值为 0 ,方差为 1 的分布,下图通过 Cost 函数让我们更好的理解标准化的作用。 机器学习的目标无非就是不断优化损失函数,使其值最小。在上图中,J (w, b) 就是我们要优化的目标函数。 我们不难看出,标准化后可以更加容易地得出最优参数 w 和 b 以及计算出 J (w, b) 的最小值,从而达到加速收敛的效果。 注

线性模型

左心房为你撑大大i 提交于 2020-05-06 15:32:02
import numpy as np import matplotlib.pyplot as plt import pandas as pd import mglearn from sklearn.model_selection import train_test_split 1.用于回归的线性模型 对于回归问题,线性模型预测的一般公式如下: y = w[0] x[0]+w[1] x[1]+...+w[p]*x[p]+b 这里x[0]到x[p]表示单个数据点的特征(本例中特征个数为p+1),w和b是学习模型的参数,yᨈ是模型的预测结果。对于单一特征的数据集,公式如下: y = w[0]*x[0]+b 这就是高中数学里的直线方程。这里w[0]是斜率,b是y轴偏移。对于有更多特征的数据集,w包含沿沿每个特征坐标轴的斜率。也可以将预测的响应值看作输入特征的加权求和,权重由w的元素给出(可以取负值)。 下列代码可以在一维wave数据集上学习参数w[0]和b mglearn.plots.plot_linear_regression_wave() w[0]: 0.393906 b: -0.031804 用于回归的线性模型可以表示为这样的回归模型:对单一特征的预测结果是一条直线,两个特征时是一个平面,或者在更高维度(即更多特征)时是一个超平面 如果将直线的预测结果与 的预测结果相比较

VOT 2017挑战赛——目标追踪相关分享

不打扰是莪最后的温柔 提交于 2020-05-06 14:57:59
转载于微信公众号:新智元 视觉跟踪领域国际顶级赛事 Visual-Object-Tracking Challenge (VOT) 2017年结果出炉,结合传统滤波及深度学习的方案取得最佳成绩。本文是第二名北京邮电大学代表团队的技术分享。他们基于滤波的框架,抛弃传统特征,只使用CNN特征,减少了特征冗余,缓解了模型过拟合,使追踪器在速度和精度上都有不小的提高。代码分享链接:https://github.com/he010103/CFWCR.git 随着深度学习在计算机视觉方面大放异彩,近几年物体追踪也得到了飞速的发展。物体追踪解决的问题是在一段时间内对于同一个物体在复杂的背景下(如遮挡,光照,物体旋转等),进行持续高速的跟踪。因此,物体追踪是监控,安防,自动驾驶,无人机,智能家居等应用中必须解决的关键课题。 作为视觉跟踪领域的最高峰,Visual-Object-Tracking Challenge (VOT) 是国际目标跟踪领域最权威的测评平台,由伯明翰大学、卢布尔雅那大学、布拉格捷克技术大学、奥地利科技学院联合创办,旨在评测在复杂场景下单目标短时跟踪的算法性能。由于每年的评测序列都会更新,且标注的精确度一年一年提高,VOT竞赛也被视为视觉跟踪领域最难的竞赛,远远超过了其他数据集。因此,每年最好的追踪算法都会在上面一展拳脚,在激烈的比拼中擦出灵感的火花。 今年的比赛 VOT 2017

sklearn & ml tutorial

家住魔仙堡 提交于 2020-05-05 23:01:40
第一章 引言 pd.scatter_matrix(pd.DataFrame(X_train),c=y_train_name,figsize=(15,15),marker='o',hist_kwds={'bins':20},s=60,alpha=.8,cmap=mglearn.cm3)#绘制散点图矩阵(pair plot),两两查看所有的特征 第二章 监督学习 2.1分类与回归 2.2泛化、过拟合与欠拟合 2.3监督学习算法 2.3.1一些样本数据集 from sklearn.datasets import load_breast_cancer #威斯康辛州乳腺癌数据集 cancer = load_breast_cancer () from sklearn.datasets import load_boston #波士顿房价数据集 boston= load_boston() X_train,X_test,y_train,y_test = train_test_split(cancer.data,cancer.target,random_state=0,test_size=.5) 2.3.2 k近邻 X_train,X_test,y_train,y_test = train_test_split(cancer.data,cancer.target,stratify=cancer

02-05 scikit-learn库之线性回归

心已入冬 提交于 2020-05-05 18:38:40
[TOC] 更新、更全的《机器学习》的更新网站,更有python、go、数据结构与算法、爬虫、人工智能教学等着你:<a target="_blank" href="https://www.cnblogs.com/nickchen121/p/11686958.html"> https://www.cnblogs.com/nickchen121/p/11686958.html </a> scikit-learn库之线性回归 由于scikit-learn库中 sclearn.linear_model 提供了多种支持线性回归分析的类,本文主要总结一些常用的线性回归的类,并且由于是从官方文档翻译而来,翻译会略有偏颇,如果有兴趣想了解其他类的使用方法的同学也可以去scikit-learn官方文档查看 https://scikit-learn.org/stable/modules/classes.html#module-sklearn.linear_model 在讲线性回归理论的时候讲到了,线性回归的目的是找到一个线性回归系数向量$\omega$,使得输入特征$X$和输出向量$Y$之间有一个 $$ Y = X\omega $$ 的映射关系,接下来的线性回归模型和线性回归模型的思想类似。假设一个数据集有$m$实例,每个实例有$n$个特征,则其中$Y$的维度是$m 1$,$X$的维度是$m n$,$

k近邻

强颜欢笑 提交于 2020-05-05 16:09:56
import numpy as np import matplotlib.pyplot as plt import pandas as pd import mglearn k-NN算法是最简单的机器学习算法。构建模型只需要保存训练数据集即可。想要对新数据点进行预测,算法会在训练数据中找到最近的数据点,也就是它的“最近邻”。 k-NN算法最简单的版本只考虑一个最近邻,也就是与我们想要预测的点的数据点最近的训练数据点。预测结果就是这个训练数据点的已知输出。 mglearn.plots.plot_knn_classification(n_neighbors=1) 除了考虑最近邻,还可以考虑任意个(k个)邻居。这也是k近邻算法名字的来历。在考虑多于一个邻居的情况时,我们用投票法来指定标签。对于每个测试点,我们数一数多少个邻居分别属于什么类别,将出现次数多的邻居的类别(k个近邻中占多数的类别)作为预测结果。 mglearn.plots.plot_knn_classification(n_neighbors=3) # 使用scikit-learn实现k近邻算法 from sklearn.model_selection import train_test_split from sklearn.neighbors import KNeighborsClassifier X, y = mglearn