精通机器学习渗透测试(三)
原文:
annas-archive.org/md5/74E92091FA78BD2C9635BCA05C8FE700译者:飞龙
第十章:机器学习和特征工程的最佳实践
在前几章中,我们学习了机器学习的基础知识,并学习了如何使用一套令人惊叹的开源 Python 库构建许多不同的 Python 项目。此外,我们深入研究了如何打破机器学习模型。
本章将通过说明项目各个方面的许多技巧和最佳实践,帮助您构建更好的模型。
在本章中,我们将涵盖以下内容:
-
机器学习中特征工程的深入概述
-
机器学习的最佳实践
技术要求
您可以在此章节的代码文件中找到此代码:github.com/PacktPublishing/Mastering-Machine-Learning-for-Penetration-Testing/tree/master/Chapter10。
机器学习中的特征工程
通过在本书中构建和开发所有项目和原型,您肯定已经注意到特征工程和特征选择对于每个现代数据科学产品,特别是基于机器学习的项目至关重要。根据研究,构建模型所花费的时间中,超过 50%的时间用于清理、处理和选择训练模型所需的数据。您有责任设计、表示和选择特征。
大多数机器学习算法无法处理原始数据。它们不够聪明。因此,需要特征工程,将原始状态的数据转换为算法可以理解和消化的数据。安德鲁·吴教授曾经说过:
“构建特征是困难的,耗时的,需要专业知识。‘应用机器学习’基本上就是特征工程。”
特征工程是数据准备阶段的一个过程,根据数据挖掘的跨行业标准流程:
“特征工程”本身并没有正式定义的术语。它将所有设计特征以构建智能系统的任务组合在一起。它在系统中扮演着重要的角色。如果您参加数据科学竞赛,我敢打赌您已经注意到,竞争者们都使用相同的算法,但获胜者表现最佳的是特征工程。如果您想提高数据科学和机器学习技能,我强烈建议您访问并参加www.kaggle.com:
在搜索机器学习资源时,您将面临许多不同的术语。为了避免混淆,我们需要区分特征选择和特征工程。特征工程将原始数据转换为合适的特征,而特征选择从工程化的数据中提取必要的特征。特征工程是选择所有特征的子集,而不包括冗余或无关的特征。
特征选择算法
为了使算法能够更快地训练,并减少模型的复杂性和过拟合,除了提高准确性之外,您可以使用许多特征选择算法和技术。我们将看一下三种不同的特征选择方法:过滤方法、包装方法和嵌入方法。让我们讨论各种方法和技术。
过滤方法
在过滤方法中,每个特征将被分配一个分数,由不同的统计量计算得出。换句话说,这些方法通过考虑特征与目标之间的关系来对特征进行排名。过滤方法通常用于预处理阶段:
皮尔逊相关系数
Pearson 相关是一种用于测量两个变量x和y之间线性相关的统计方法。它的范围在+1和-1之间;+1表示有正相关。你需要知道x和y应该是连续变量。Pearson 相关系数的公式如下:
Cov是协方差,dx和dy是x和y的标准差:
要使用 Python 计算这个,你可以使用scipy.stats.pearsonr(x, y),来自scipy库。
线性判别分析
在以前的章节中,特别是在第一章,渗透测试中的机器学习简介中,我们看到了主成分分析(PCA)的统计程序。线性判别分析(LDA)也是一种降维技术。它用于找到将类别分开的特征的线性组合:
要在 scikit-learn 中使用 LDA,请使用以下行导入:
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA
使用方法如下:
sklearn_lda = LDA(n_components=2)
X_lda_sklearn = sklearn_lda.fit_transform(X, y)
方差分析
方差分析(ANOVA)类似于 LDA,但它使用分类特征来检查几个类的均值是否相等,通过分析它们之间的差异。
卡方
卡方用于确定子集数据是否与总体相匹配。值应该是在类别中。换句话说,卡方检验用于检查不同类别或类别之间的相关性和关联。
卡方检验的公式如下:
以下是使用 scikit-learn 的卡方的示例,由 Jason Brownlee,博士提供:
import pandas
import numpy
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2
# load data
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = pandas.read_csv(url, names=names)
array = dataframe.values
X = array[:,0:8]
Y = array[:,8]
# feature extraction
test = SelectKBest(score_func=chi2, k=4)
fit = test.fit(X, Y)
# summarize scores
numpy.set_printoptions(precision=3)
print(fit.scores_)
features = fit.transform(X)
# summarize selected features
print(features[0:5,:])
以下图表说明了前面的代码:
包装方法
包装方法是通过取子集和训练学习算法来执行的。根据训练的结果,我们可以选择我们模型的最佳特征。而且,你可能已经猜到,这些方法在计算上非常昂贵:
有许多包装技术,包括以下部分中列出的技术。
前向选择
前向选择使用搜索作为选择最佳特征的技术。这是一种迭代方法。在每次迭代中,我们添加更多特征以改进模型,直到我们没有进一步的改进为止:
向后消除
向后消除与前一种方法类似,但是这次我们从所有特征开始,并且在每次迭代中消除一些特征,直到模型停止改进:
递归特征消除
你可以看到递归特征消除作为一种贪婪的优化算法。这种技术是通过创建具有不同子集的模型并计算最佳执行特征来执行的,根据消除排名对它们进行评分。
这个脚本与前一个类似,但它使用递归特征消除作为特征选择方法:
from pandas import read_csv
from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression
# load data
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(url, names=names)
array = dataframe.values
X = array[:,0:8]
Y = array[:,8]
# feature extraction
model = LogisticRegression()
rfe = RFE(model, 3)
fit = rfe.fit(X, Y)
print("Num Features: %d") % fit.n_features_print("Selected Features: %s") % fit.support_
print("Feature Ranking: %s") % fit.ranking_
以下图表说明了前面的代码:
嵌入方法
特征选择嵌入方法的主要目标是学习哪些特征对机器学习模型的准确性贡献最大。它们具有内置的惩罚函数以减少过拟合:
一些嵌入技术列在以下部分。
Lasso 线性回归 L1
在统计学中,Lasso 是一种回归分析方法。Lasso 线性回归 L1 简单地增加了一个与系数大小的绝对值等价的惩罚。以下是 Python 和 sckit-learn 中该方法的实现:
>>> from sklearn.svm import LinearSVC
>>> from sklearn.datasets import load_iris
>>> from sklearn.feature_selection import SelectFromModel
>>> iris = load_iris()
>>> X, y = iris.data, iris.target
>>> X.shape
>>> lsvc = LinearSVC(C=0.01, penalty="l1", dual=False).fit(X, y)
>>> model = SelectFromModel(lsvc, prefit=True)
>>> X_new = model.transform(X)
>>> X_new.shape
岭回归 L2
岭回归 L2 方法增加了一个与系数大小的平方等价的惩罚。换句话说,它执行 L2 正则化。
基于树的特征选择
基于树的特征选择方法用于检查和计算特征的重要性。以下是一个示例,展示了如何使用 scikit-learn 官方文档提供的基于树的特征选择技术:
>>> from sklearn.ensemble import ExtraTreesClassifier
>>> from sklearn.datasets import load_iris
>>> from sklearn.feature_selection import SelectFromModel
>>> iris = load_iris()
>>> X, y = iris.data, iris.target
>>> X.shape
>>> clf = ExtraTreesClassifier()
>>> clf = clf.fit(X, y)
>>> clf.feature_importances_
>>> model = SelectFromModel(clf, prefit=True)
>>> X_new = model.transform(X)
>>> X_new.shape
正如我之前所说,特征选择是在预处理阶段使用的,因此您可以使用 scikit-learn 来构建一个流水线,就像以下示例中的那样:
Classifier = Pipeline([
('feature_selection', SelectFromModel(<SelectionTechniqueHere>))),
('classification', <ClassificationAlgorithmHere>)
])
Classifier.fit(X, y)
一本名为An Introduction to Variable and Feature Selection的好书,作者是 Isabelle Guyon 和 Andre Elisseeff,其中包括了一个更好的特征选择清单。
要了解更多有关完整清单的信息,您可以浏览machinelearningmastery.com/an-introduction-to-feature-selection/。
机器学习的最佳实践
在之前的章节中,我们看到了如何进行特征工程来增强我们的机器学习系统的性能。现在,我们将讨论一些建立健壮智能系统的技巧和最佳实践。让我们探索机器学习项目不同方面的一些最佳实践。
信息安全数据集
数据是每个机器学习模型的重要组成部分。为了训练模型,我们需要提供数据集。在阅读之前的章节时,您可能已经注意到,要构建准确和高效的机器学习模型,您需要大量的数据,即使在清理数据之后也是如此。拥有大量可用数据的大公司使用其内部数据集来构建模型,但是像初创公司这样的小组织通常很难获取这么多的数据。国际规则和法规使这一任务变得更加困难,因为数据隐私是信息安全的重要方面。每个现代企业都必须保护其用户的数据。为了解决这个问题,许多机构和组织提供了公开可用的数据集,以便其他人可以下载并构建用于教育或商业用途的模型。一些信息安全数据集如下:
-
用于入侵检测的控制区域网络(CAN)数据集(OTIDS):
ocslab.hksecurity.net/Dataset/CAN-intrusion-dataset -
用于入侵检测的汽车黑客数据集:
ocslab.hksecurity.net/Datasets/CAN-intrusion-dataset -
用于网络犯罪分析的网络黑客数据集:
ocslab.hksecurity.net/Datasets/web-hacking-profiling -
基于 API 的恶意软件检测系统(APIMDS)数据集:
ocslab.hksecurity.net/apimds-dataset -
入侵检测评估数据集(CICIDS2017):
www.unb.ca/cic/datasets/ids-2017.html -
Tor-nonTor 数据集:
www.unb.ca/cic/datasets/tor.html -
Android 广告软件和一般恶意软件数据集:
www.unb.ca/cic/datasets/android-adware.html
Jupyter 项目
Jupyter Notebook 是一个开源的 Web 应用程序,用于创建和共享编码文档。我强烈推荐它,特别是对于新手数据科学家,原因有很多。它将使您能够直接编写和可视化输出。它非常适合发现和处理数据;探索数据是构建机器学习模型的重要步骤。
Jupyter 的官方网站是jupyter.org/:
要使用pip安装它,只需输入以下内容:
python -m pip install --upgrade pip
python -m pip install jupyter
使用 GPU 加速训练
正如你所知,即使进行了良好的特征工程,机器学习训练在计算上是昂贵的。训练学习算法的最快方法是使用图形处理单元(GPU)。一般来说,虽然不是所有情况,使用 GPU 是训练模型的明智决定。为了克服 CPU 性能瓶颈,最好使用聚集/分散 GPU 架构,执行并行操作以加快计算速度。
TensorFlow 支持使用 GPU 来训练机器学习模型。因此,设备被表示为字符串;以下是一个例子:
"/device:GPU:0" : Your device GPU
"/device:GPU:1" : 2nd GPU device on your Machine
要在 TensorFlow 中使用 GPU 设备,可以添加以下行:
with tf.device('/device:GPU:0'):
<What to Do Here>
你可以使用单个 GPU 或多个 GPU。不要忘记安装 CUDA 工具包,使用以下命令:
Wget "http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_8.0.44-1_amd64.deb"
sudo dpkg -i cuda-repo-ubuntu1604_8.0.44-1_amd64.deb
sudo apt-get update
sudo apt-get install cuda
按照以下方式安装 cuDNN:
sudo tar -xvf cudnn-8.0-linux-x64-v5.1.tgz -C /usr/local
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64"
export CUDA_HOME=/usr/local/cuda
选择模型和学习曲线
为了提高机器学习模型的性能,有许多超参数需要调整。使用的数据越多,出现的错误就越多。为了处理这些参数,有一种称为GridSearchCV的方法。它通过迭代在预定义的参数值上执行搜索。GridSearchCV默认使用score()函数。要在 scikit-learn 中使用它,可以使用以下行导入:
from sklearn.grid_search import GridSearchCV
学习曲线用于了解机器学习模型的性能。要在 scikit-learn 中使用学习曲线,可以将其导入到 Python 项目中,如下所示:
from sklearn.learning_curve import learning_curve
机器学习架构
在现实世界中,数据科学家并不认为数据像公开可用的数据集那样干净。现实世界的数据以不同的方式存储,数据本身也以不同的类别呈现。因此,机器学习从业者需要构建自己的系统和流程来实现他们的目标并训练模型。典型的机器学习项目遵循以下架构:
编码
良好的编码技能对于数据科学和机器学习非常重要。除了使用有效的线性代数、统计学和数学,数据科学家还应该学会如何正确编码。作为一名数据科学家,你可以选择许多编程语言,比如 Python、R、Java 等。
尊重编码的最佳实践非常有帮助,也强烈推荐。通过以下提示可以编写优雅、清晰和易懂的代码:
-
注释对于可理解的代码非常重要。因此,不要忘记一直对代码进行注释。
-
为变量、函数、方法、包和模块选择正确的名称。
-
每个缩进级别使用四个空格。
-
正确结构化你的存储库。
-
遵循常见的样式指南。
如果你使用 Python,你可以遵循这个伟大的格言,称为Python 之禅,由传奇人物 Tim Peters 撰写:
"美丽胜过丑陋。
显式胜于隐式。
简单胜于复杂。
复杂胜于复杂。
扁平胜于嵌套。
稀疏胜于密集。
可读性很重要。
特殊情况并不特别到足以打破规则。
尽管实用性胜过纯粹性。
错误不应该悄悄地传递。
除非明确地被压制。
面对模棱两可的情况,拒绝猜测的诱惑。
应该有一种——最好只有一种——明显的方法来做到这一点。
虽然这种方式一开始可能不太明显,除非你是荷兰人。
现在胜于永远。
虽然从来没有比现在更好。
如果实现难以解释,那就是一个坏主意。
如果实现容易解释,那可能是一个好主意。
命名空间是一个伟大的想法——让我们做更多这样的事情!
数据处理
良好的数据处理有助于成功构建机器学习项目。加载数据集后,请确保所有数据都已正确加载,并且读取过程正在正确执行。在对数据集执行任何操作后,请检查生成的数据集。
商业背景
智能系统与业务方面高度相关,毕竟您正在使用数据科学和机器学习来解决业务问题或构建商业产品,或者从获取的数据中获得有用的见解,以做出明智的决策。在构建机器学习模型时,识别正确的问题并提出正确的问题是重要的,以解决业务问题。
总结
这本书是一个实用指南,教你如何使用开源库、Python 和一套开源项目来构建机器学习项目,以抵御网络威胁和恶意活动。我们不止于此;我们还向您展示了如何使用对抗机器学习来攻击这些模型。通过这样做,您获得了一套分析数据、构建防御系统和突破下一代安全防护的技能。我们在书中讨论了许多观点,以帮助您构建更好的模型。
问题
-
特征工程和特征选择有什么区别?
-
主成分分析(PCA)和特征选择有什么区别?
-
我们如何对日期和小时等特征进行编码?
-
为什么打印出训练和测试准确性很有用?
-
我们如何部署机器学习模型并在产品中使用它?
-
为什么特征工程比其他步骤花费更多时间?
-
虚拟变量的作用是什么?
进一步阅读
论文和幻灯片:
-
特征工程 - 知识发现与数据挖掘 1,作者:Roman Kern:
kti.tugraz.at/staff/denis/courses/kddm1/featureengineering.pdf -
特征工程和选择(
people.eecs.berkeley.edu/~jordan/courses/294-fall09/lectures/feature/slides.pdf)- CS 294:实用机器学习,伯克利:people.eecs.berkeley.edu/~jordan/courses/294-fall09/lectures/feature/ -
特征工程 作者:Leon Bottou,普林斯顿:
www.cs.princeton.edu/courses/archive/spring10/cos424/slides/18-feat.pdf
博客文章:
-
发现特征工程-如何进行特征工程以及如何擅长它:
machinelearningmastery.com/discover-feature-engineering-how-to-engineer-features-and-how-to-get-good-at-it/
书籍:
-
特征提取、构造和选择:数据挖掘视角:
www.amazon.com/dp/0792381963?tag=inspiredalgor-20 -
特征提取:基础和应用:
www.amazon.com/dp/3540354875?tag=inspiredalgor-20 -
计算机视觉的特征提取和图像处理,第三版:
www.amazon.com/dp/0123965497?tag=inspiredalgor-20
第十一章:评估
第一章:- 机器学习入门
- 尽管机器学习是一个有趣的概念,但在有用的有限业务应用中。
假
- 机器学习应用程序太复杂,无法在云中运行。
假
- 对于两次 k 均值聚类运行,预期得到相同的聚类
结果?
不
- 具有离散值目标属性的预测模型可以称为:
分类模型
- 以下哪种技术执行与退出类似的操作
神经网络?
装袋
- 神经网络的哪种架构最适合解决图像识别问题?
卷积神经网络
- 深度学习与传统机器学习有何不同?
深度学习算法可以处理更多数据,并且在较少的数据科学家监督下运行。
- 以下哪种技术在机器学习项目中经常使用?
以上所有
第二章:- 钓鱼域名检测
- 以下是一些文本清理任务:
-
清除文本中的停用词、数字和标点符号。
-
执行词形还原。
-
创建一个包括它们频率的单词字典。
-
从字典中删除非单词。
-
从数据中提取特征。
查看Chapter2-Practice文件夹以获取答案:github.com/PacktPublishing/Mastering-Machine-Learning-for-Penetration-Testing/tree/master/Chapter%202/Chaptre2-Practice。
- 准备特征向量及其标签。
train_labels = np.zeros(702)
train_labels[351:701] = 1
train_matrix = extract_features(train_dir)
- 使用线性支持向量机分类器训练模型。
model = LinearSVC()
model.fit(train_matrix,train_labels)
- 打印模型的混淆矩阵。
result = model.predict(test_matrix)
print (confusion_matrix(test_labels,result))
第三章:- 使用 API 调用和 PE 标头检测恶意软件
- 使用 pandas python 库加载数据集,这次添加
low_memory=False参数。搜索该参数的作用。
df = pd.read_csv(file_name, low_memory=False)
- 准备用于训练的数据。
original_headers = list(df.columns.values)
total_data = df[original_headers[:-1]]
total_data = total_data.as_matrix()
target_strings = df[original_headers[-1]]
- 使用
test_size=0.33参数拆分数据。
train, test, target_train, target_test = train_test_split(total_data, target_strings, test_size=0.33, random_state=int(time.time()))
- 创建一个包含
DecisionTreeClassifier()、RandomForestClassifier(n_estimators=100)和AdaBoostClassifier()的分类器集合:
classifiers = [
RandomForestClassifier(n_estimators=100),
DecisionTreeClassifier(),
AdaBoostClassifier()]
- 什么是
AdaBoostClassifier()?
AdaBoost 分类器是一个元估计器,它首先在原始数据集上拟合一个分类器,然后在相同数据集上拟合额外的分类器副本。
- 使用三个分类器训练模型,并打印每个分类器的指标。
请查看Chapter3-Practice文件夹以获取解决方案:github.com/PacktPublishing/Mastering-Machine-Learning-for-Penetration-Testing/tree/master/Chapter%203/Chapter3-Practice.
第四章:- 使用深度学习检测恶意软件
- MLP 网络和深度学习网络之间有什么区别?
深度网络已经是多层感知器网络,但至少有三个隐藏层。
- 为什么最近 DL 开始起飞?
因为我们可以访问更多的计算能力和数据。
- 为什么我们需要通过不同模型进行多次迭代?
因为没有人可以在没有迭代的情况下总是找到最佳模型或超参数。
- 需要哪种类型的深度学习来将英语翻译成法语?
循环神经网络(RNN)
- 为什么恶意软件可视化是分类恶意软件的好方法?
因为我们可以使用最先进的图像识别来构建恶意软件分类器。
- 激活函数的作用是什么?
它定义了给定节点的输出。换句话说,它将 A-NN 的节点的输入信号转换为输出信号。
- 你能提到三种 DL 架构吗?
-
卷积神经网络(CNNs)
-
循环神经网络(RNNs)
-
长/短期记忆网络(LSTMs)
第五章:- 机器学习中的僵尸网络检测
与每章结束后一样,我们将给您机会练习所学内容并评估您的技能。本章的 GitHub 存储库包含练习文件夹中的僵尸网络流量数据集的链接:github.com/PacktPublishing/Mastering-Machine-Learning-for-Penetration-Testing/tree/master/Chapter5:
-
下载数据集,并使用 pandas 库加载它
-
选择合适的特征
-
识别训练和测试集,然后将它们导出到
.pickle文件中 -
加载
.pickle文件 -
使用第五章的相同代码块,使用机器学习进行僵尸网络检测。
导入支持向量机分类器:
from sklearn.svm import *
训练 SVM 模型:
clf= SVC(kernel='rbf')
clf.fit(Xdata, Ydata)
打印出构建模型的准确性:
Score = clf.score(XdataT,YdataT)
print (“The Score of the SVM Classifier is”, Score * 100)
第六章:- 异常检测系统中的机器学习
- 什么是异常?
异常是指偏离标准、正常或预期的事物。
- 什么是马尔可夫链?
马尔可夫链,或者我们所说的马尔可夫过程,是用于任何根据固定概率改变其状态的随机系统的随机模型。
- 隐马尔可夫模型是什么?
隐藏马尔可夫模型是一个马尔可夫过程,我们无法直接观察系统的状态。每个状态都有一个固定的发射概率。HMM 模型或分类器的主要目标是为一系列序列分配标签,这意味着将一系列观察链接到一系列标签。
- 我们如何使用隐藏马尔可夫模型检测异常?
根据隐藏马尔可夫模型的定义,我们可以使用它来区分网络流量的正常行为和异常行为。
- 时间序列异常检测和其他类型的异常检测有什么区别?
时间序列是在连续时间获得的值,通常它们之间的间隔是相等的。在时间序列异常检测中,我们正在检测在特定时间记录的数据点序列中的异常。在大多数其他检测方法中,我们使用诸如基于图的技术。
- 监督和无监督机器学习异常检测有什么区别?
这两种模型的区别在于所使用的机器学习算法。例如,在监督机器学习异常检测中,我们可以使用分类;而在无监督机器学习异常检测中,我们可以使用聚类。
第七章:- 检测高级持续威胁
- 以下哪个不是网络攻击的钻石模型中的步骤?
(a) 扫描
- 以下哪个选项不是入侵的钻石模型的节点?
分析?
(c) 程序
- Logstash 配置文件需要多少部分?
(b) 3
- 在 ElasticSearch 中,什么是索引?
(a) 将数据存储在索引中的过程
- 在 Elasticsearch 中,什么是节点?
(a) Elasticsearch 的一个实例
- 在 Elasticsearch 中,什么是分片?
(c) 共享资源(RAM,vCPU)
- Elasticsearch 有模式吗?
(a) 是的
第八章:- 使用对抗机器学习规避入侵检测系统
- 您能简要解释一下为什么过度训练机器学习模型不是一个好主意吗?
好主意?
通过过度训练机器学习模型,我们过度训练模型,使其在新数据上的性能受到负面影响。这也被称为过拟合。
- 过拟合和欠拟合有什么区别?
过拟合是指过度训练模型,而欠拟合是指模型既不能对训练数据建模,也不能推广到新数据。
- 规避和毒化攻击有什么区别?
在规避对抗攻击中,攻击者尝试许多不同的样本来识别绕过学习模式;而在毒化攻击中,攻击者在训练阶段中毒化模型。
- 对抗聚类是如何工作的?
当攻击者操纵输入数据(添加小部分攻击样本)时,对抗性聚类发生,以便新添加的样本可以隐藏在现有的聚类中。
- 用于避免入侵检测系统的对抗攻击类型是什么?
演示中使用的攻击称为基于雅可比显著性图的攻击。
- 前述攻击是规避还是毒化攻击?
这是一种毒化对抗攻击。
第九章:- 绕过机器学习恶意软件检测器
- 生成对抗网络的组件是什么?
生成对抗网络的两个主要组件是生成器和鉴别器。
- 生成器和鉴别器之间有什么区别?
生成器以潜在样本作为输入。它们是随机生成的数字,并且经过训练以生成图像,而鉴别器只是一个使用监督学习技术训练的分类器,用于检查图像是真实的(1)还是伪造的(0)。
- 我们如何确保恶意软件对抗样本在…时仍然有效?
我们正在生成它们吗?
为了避免无效样本,我们可以使用沙盒/Oracle。
- 进行一些研究,然后简要解释如何检测对抗样本
要检测对抗样本,我们可以使用二值阈值处理来去除噪音。
- 强化学习与深度学习有何不同?
强化学习通过探索从某些状态可用的动作来学习如何最大化奖励函数,而深度学习则是从它所展示的示例中学习。
- 监督学习和强化学习之间有什么区别?
在监督学习中,给定输入数据 X 和标签 Y,我们正在学习一个将 X 映射到 Y 的函数 f:X→Y。在强化学习中,代理在经历了一定数量的经验后变得更加智能。
- 在强化学习中,代理如何学习?
在强化学习中,代理通过与基于奖励函数的环境交互来学习,以优化其性能。
第十章:- 机器学习和特征工程的最佳实践
- 特征工程和特征选择之间有什么区别?
特征选择是特征工程的一部分。
- 主成分分析(PCA)和特征选择之间有什么区别?
特征选择获取数据集并为我们提供最佳的特征集,而主成分分析是一种降维方法。
- 我们如何对日期和小时等特征进行编码?
其中一种技术是添加时间变量的(正弦,余弦)变换。
- 为什么打印出训练和测试准确度很有用?
通过比较这两个指标来检测过拟合是很有用的。
- 我们如何部署机器学习模型并在产品中使用它?
有许多将机器学习模型投入生产的方法,例如基于您的模型(在线、离线?深度学习、支持向量机、朴素贝叶斯?)的网络服务和容器化。
- 为什么特征工程比其他步骤花费更多时间?
因为分析、清理和处理特征比构建模型需要更多时间。
- 虚拟变量的作用是什么?
虚拟变量是在回归分析中使用的数值变量,用于表示研究中样本的子组。在研究设计中,虚拟变量通常用于区分不同的处理组。