机器学习速成课程----数据准备
目录
在7天内使用Python进行数据准备。
数据准备涉及将原始数据转换为更适合建模的形式。
数据准备可能是预测建模项目中最重要的部分,也是最耗时的过程,尽管似乎讨论得最少。 相反,重点是机器学习算法,其使用和参数化已成为常规操作。
实际的数据准备需要了解数据清洗,特征选择数据转换,降维等知识。
在本速成课程中,您将发现如何在7天内开始使用Python进行预测性建模项目,并自信地准备数据。
这是重要的职位。 您可能要为其添加书签。
让我们开始吧。
机器学习的数据准备(7天微型课程)Christian Collins摄,保留部分权利。
此速成课程适用于谁?
在开始之前,请确保您在正确的位置。
本课程适用于可能了解一些应用机器学习的开发人员。 也许您知道如何使用流行的工具端到端地解决预测建模问题,或者至少解决了大多数主要步骤。
本课程的课程确实假设了一些有关您的事情,例如:您知道如何使用基本的Python进行编程。
您可能知道一些用于数组操作的基本NumPy。
您可能知道一些基本的scikit学习模型。
您不必是:数学奇才!
机器学习专家!
本速成课程将带您从对机器学习有一点了解的开发人员,到可以有效地为预测建模项目准备数据的开发人员。
注意:本速成课程假定您具有至少安装了NumPy的Python 3 SciPy环境。 如果您需要有关环境的帮助,则可以按照此处的分步教程进行操作:如何为Anaconda设置用于机器学习的Python环境 https://machinelearningmastery.com/setup-python-environment-machine-learning-deep-learning-anaconda/
速成课程概述本速成课程分为七个课程。
您可以每天完成一堂课(推荐),也可以在一天之内完成所有课程(核心课程)。 这实际上取决于您有空的时间和您的热情水平。
以下列出了七个课程,可帮助您入门并提高使用Python进行数据准备的能力:
- 第01课:数据准备的重要性;
- 第02课:用插补法填充缺失的值;
- 第03课:使用RFE选择特征;
- 第04课:用归一化缩放数据 ;
- 第5课:使用热编码(One-Hot)将类别转换为;
- 第06课:通过kBins将数字转换为类别;
- 第07课:使用PCA进行降维;
每节课可能需要60秒钟或最多30分钟的时间。 花点时间按照自己的进度完成课程。 提出问题,甚至在以下评论中发布结果。
这些课程可能会让您开始学习如何做事。 我会给您一些提示,但是每节课的重点是迫使您学习在哪里寻求有关Python的算法和最佳工具的帮助。 (提示:我在此博客上拥有所有答案;请使用搜索框。)在评论中发布您的结果; 我会加油的!
坚持, 不要放弃
第1课:数据准备的重要性
在本课程中,您将发现数据准备在机器学习的预测建模中的重要性。
预测建模项目涉及从数据中学习。
数据是指来自域的表征您要解决的问题的示例或案例。
在预测建模项目(例如分类或回归)上,原始数据通常无法直接使用。
出现这种情况的主要原因有四个:
- 数据类型:机器学习算法要求数据为数字。
- 数据要求:某些机器学习算法对数据有要求。
- 数据错误:可能需要纠正统计噪声和数据错误。
- 数据复杂性:可以从数据中挑出复杂的非线性关系。
原始数据必须先进行预处理,然后才能用于拟合和评估机器学习模型。 预测建模项目中的这一步骤称为“数据准备”。 在机器学习项目的数据准备步骤中,您可能会使用或探索一些常见或标准任务。
这些任务包括:
- 数据清理:识别和纠正数据中的错误或错误。
- 功能选择:标识与任务最相关的那些输入变量。
- 数据转换:更改变量的规模或分布。
- 特征工程:从可用数据中获取新变量。
- 降维:创建数据的紧凑投影。
这些任务中的每一个都是具有专门算法的整个研究领域。
您的任务:
在本课程中,您必须列出以前知道或可能使用过的三种数据准备算法,并为此目的给出一个单行摘要。
数据准备算法的一个示例是数据归一化,它将数值变量缩放到零到一之间的范围。
在下面的评论中发布您的答案。 我很想看看你的想法。
在下一课中,您将发现如何修复缺少值的数据,称为数据插补。
第2课:通过插补填充缺失值
在本课程中,您将发现如何识别和填充数据中的缺失值。
实际数据通常缺少值。
数据可能由于许多原因而缺少值,例如未记录的观察值和数据损坏。 处理缺失数据很重要,因为许多机器学习算法不支持缺失值的数据。
用数据填充缺失值称为数据插补,数据插补的一种流行方法是计算每列的统计值(例如平均值),然后用统计量替换该列的所有缺失值。
马绞痛数据集(https://raw.githubusercontent.com/jbrownlee/Datasets/master/horse-colic.csv)描述患有绞痛的马的医学特征以及它们的存活或死亡。 它缺少的值都标有问号“?”。 我们可以使用read_csv()函数加载数据集,并确保将问号值标记为NaN。
加载后,我们可以使用SimpleImputer类转换所有用NaN值标记的缺失值以及列的平均值。
下面列出了完整的示例。
# statistical imputation transform for the horse colic dataset
from numpy import isnan
from pandas import read_csv
from sklearn.impute import SimpleImputer
# load dataset
url = 'https://raw.githubusercontent.com/jbrownlee/Datasets/master/horse-colic.csv'
dataframe = read_csv(url, header=None, na_values='?')
# split into input and output elements
data = dataframe.values
X, y = data[:, :-1], data[:, -1]
# print total missing
print('Missing: %d' % sum(isnan(X).flatten()))
# define imputer
imputer = SimpleImputer(strategy='mean')
# fit on the dataset
imputer.fit(X)
# transform the dataset
Xtrans = imputer.transform(X)
# print total missing
print('Missing: %d' % sum(isnan(Xtrans).flatten()))
您的任务:
对于本课,您必须运行示例并检查数据归因转换前后数据集中缺失值的数量。
在下面的评论中发布您的答案。 我很想看看你的想法。
在下一课中,您将发现如何选择数据集中最重要的要素。
第3课:使用RFE选择特征
在本课程中,您将发现如何选择数据集中最重要的要素。
特征选择是在开发预测模型时减少输入变量数量的过程。
希望减少输入变量的数量,以减少建模的计算成本,并且在某些情况下,还需要改善模型的性能。
递归特征消除(Recursive Feature Elimination)或简称RFE是一种流行的特征选择算法。
RFE之所以受欢迎是因为它易于配置和使用,并且可以有效地选择训练数据集中与预测目标变量更多或最相关的那些特征(列)。
scikit-learn Python机器学习库为机器学习提供了RFE的实现。 RFE是一种转变。 要使用它,首先,使用通过“ estimator”参数指定的所选算法以及通过“ n_features_to_select”参数选择的特征数量来配置该类。
以下示例定义了具有五个冗余输入要素的综合分类数据集。 然后,使用决策树算法将RFE用于选择五个特征。
# report which features were selected by RFE
from sklearn.datasets import make_classification
from sklearn.feature_selection import RFE
from sklearn.tree import DecisionTreeClassifier
# define dataset
X, y = make_classification(n_samples=1000, n_features=10, n_informative=5, n_redundant=5, random_state=1)
# define RFE
rfe = RFE(estimator=DecisionTreeClassifier(), n_features_to_select=5)
# fit RFE
rfe.fit(X, y)
# summarize all features
for i in range(X.shape[1]):
print('Column: %d, Selected=%s, Rank: %d' % (i, rfe.support_[i], rfe.ranking_[i]))
您的任务
对于本课程,您必须运行示例并查看选择了哪些功能以及分配每个输入功能的相对排名。
在下面的评论中发布您的答案。 我很想看看你的想法。
在下一课中,您将发现如何缩放数字数据。
第4课:使用规范化缩放数据
在本课程中,您将发现如何缩放数值数据以进行机器学习。
当数字输入变量缩放到标准范围时,许多机器学习算法的性能会更好。
这包括使用输入加权和的算法(例如线性回归)和使用距离度量的算法(例如k最近邻)。
归一化是在建模之前缩放数字数据的最流行技术之一。 归一化将每个输入变量分别缩放到范围0-1,这是我们精度最高的浮点值的范围。 它要求您知道或能够准确估计每个变量的最小和最大可观察值。 您也许可以从可用数据中估计这些值。
您可以使用scikit-learn对象MinMaxScaler规范化数据集。
下面的示例定义了一个综合分类数据集,然后使用MinMaxScaler对输入变量进行归一化。
# example of normalizing input data
from sklearn.datasets import make_classification
from sklearn.preprocessing import MinMaxScaler
# define dataset
X, y = make_classification(n_samples=1000, n_features=5, n_informative=5, n_redundant=0, random_state=1)
# summarize data before the transform
print(X[:3, :])
# define the scaler
trans = MinMaxScaler()
# transform the data
X_norm = trans.fit_transform(X)
# summarize data after the transform
print(X_norm[:3, :])
您的任务
对于本课程,您必须运行示例并在规范化转换之前和之后报告输入变量的比例。
对于加分,请计算转换前后每个变量的最小值和最大值,以确认已按预期应用。
在下面的评论中发布您的答案。 我很想看看你的想法。
在下一课中,您将发现如何将分类变量转换为数字。
第5课:使用热编码(One-Hot)转换类别
在本课程中,您将发现如何将分类输入变量编码为数字。
机器学习模型要求所有输入和输出变量均为数字。 这意味着,如果您的数据包含分类数据,则必须先将其编码为数字,然后才能拟合和评估模型。
将分类变量转换为数字的最流行的技术之一是热编码。
分类数据是包含标签值而不是数字值的变量。
可以将分类变量的每个标签映射到唯一的整数,称为序数编码。 然后,可以将热编码应用于顺序表示。 在此处,将为变量中的每个唯一整数值向数据集添加一个新的二进制变量,并从数据集中删除原始类别变量。
例如,假设我们有一个带有三个类别(“红色”,“绿色”和“蓝色”)的“颜色”变量。 在这种情况下,需要三个二进制变量。 颜色在二进制变量中放置“ 1”值,其他颜色放置在“ 0”值中。
例如:
red, green, blue
1, 0, 0
0, 1, 0
0, 0, 1
可以通过OneHotEncoder类在scikit-learn Python机器学习库中进行此一键编码转换。
乳腺癌数据集仅包含分类输入变量。
https://raw.githubusercontent.com/jbrownlee/Datasets/master/breast-cancer.csv
下面的示例加载数据集,并对每个分类输入变量进一次热编码。
# one-hot encode the breast cancer dataset
from pandas import read_csv
from sklearn.preprocessing import OneHotEncoder
# define the location of the dataset
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/breast-cancer.csv"
# load the dataset
dataset = read_csv(url, header=None)
# retrieve the array of data
data = dataset.values
# separate into input and output columns
X = data[:, :-1].astype(str)
y = data[:, -1].astype(str)
# summarize the raw data
print(X[:3, :])
# define the one hot encoding transform
encoder = OneHotEncoder(sparse=False)
# fit and apply the transform to the input data
X_oe = encoder.fit_transform(X)
# summarize the transformed data
print(X_oe[:3, :])
您的任务
对于本课,您必须运行示例并报告转换前的原始数据,以及应用一键编码后对数据的影响。
在下面的评论中发布您的答案。 我很想看看你的想法。
在下一课中,您将发现如何将数值变量转换为类别。
第6课:使用kBins将数字转换为类别
在本课程中,您将发现如何将数字变量转换为分类变量。
一些机器学习算法可能更喜欢或需要分类或有序的输入变量,例如某些决策树和基于规则的算法。
这可能是由于数据中的异常值,多模式分布,高指数分布等等。
当将具有非标准分布的数字输入变量转换为具有新的分布或全新的数据类型时,许多机器学习算法会更喜欢或表现更好。
一种方法是使用数字变量的变换来获得离散的概率分布,其中,每个数字值都被分配了一个标签,并且标签具有有序(序数)关系。
这称为离散化变换,它可以通过使数值输入变量的概率分布离散来提高数据集的某些机器学习模型的性能。
可通过KBinsDiscretizer类在scikit-learn Python机器学习库中进行离散化转换。
它允许您指定要创建的离散仓的数量(n_bins),变换的结果是序数编码还是单热编码(编码),以及用于划分变量值的分布(策略) ,例如“ uniform”。下面的示例创建一个包含10个数字输入变量的合成输入变量,然后使用序数编码将每个变量编码成10个离散的bin。
from sklearn.datasets import make_classification
from sklearn.preprocessing import KBinsDiscretizer
# define dataset
X, y = make_classification(n_samples=1000, n_features=5, n_informative=5, n_redundant=0, random_state=1)
# summarize data before the transform
print(X[:3, :])
# define the transform
trans = KBinsDiscretizer(n_bins=10, encode='ordinal', strategy='uniform')
# transform the data
X_discrete = trans.fit_transform(X)
# summarize data after the transform
print(X_discrete[:3, :])
您的任务:
对于本课,您必须运行示例并在转换之前对原始数据进行报告,然后对转换对数据的影响进行报告。
对于奖励积分,请探索变换的替代配置,例如不同的策略和箱数。
在下面的评论中发布您的答案。 我很想看看你的想法。
在下一课中,您将发现如何减少输入数据的维数。
第7课:使用PCA进行降维在
本课程中,您将发现如何使用降维来减少数据集中输入变量的数量。
数据集的输入变量或特征的数量称为其维数。
降维是指减少数据集中输入变量数量的技术。
更多的输入功能通常会使预测性建模任务对建模更具挑战性,通常被称为维度诅咒。
尽管在高维统计中,降维技术通常用于数据可视化,但是这些技术可以用于应用机器学习中,以简化分类或回归数据集,以便更好地拟合预测模型。
机器学习中降维的最流行技术也许是主成分分析,或简称PCA。 这是一种来自线性代数领域的技术,可以用作数据准备技术,以在拟合模型之前创建数据集的投影。
然后,可以将所得的数据集(投影)用作训练机器学习模型的输入。
scikit-learn库提供了PCA类,该类可以适合数据集,并可以用于将来转换训练数据集和任何其他数据集。
下面的示例创建一个具有10个输入变量的合成二进制分类数据集,然后使用PCA将数据集的维数减少为三个最重要的组成部分。
# example of pca for dimensionality reduction
from sklearn.datasets import make_classification
from sklearn.decomposition import PCA
# define dataset
X, y = make_classification(n_samples=1000, n_features=10, n_informative=3, n_redundant=7, random_state=1)
# summarize data before the transform
print(X[:3, :])
# define the transform
trans = PCA(n_components=3)
# transform the data
X_dim = trans.fit_transform(X)
# summarize data after the transform
print(X_dim[:3, :])
您的任务
对于本课程,您必须运行示例并报告原始数据集和应用转换后的数据集的结构和形式。
要获得加分,请使用不同数量的选定组件来探索变换。
在下面的评论中发布您的答案。 我很想看看你的想法。
这是小课程的最后一课。
结束!
(看你走了多远)你做到了。 做得好!
花一点时间,回头看看你已经走了多远。
您发现:
- 数据准备在预测建模机器学习项目中的重要性。
- 如何使用统计插补标记缺失数据并插补缺失值。
- 如何使用递归特征消除来删除冗余输入变量。
- 如何将具有不同比例的输入变量转换为称为标准化的标准范围。
- 如何将分类输入变量转换为数字,称为“一键编码”。
- 如何将数值变量转换为离散类别,称为离散化。
- 如何使用PCA创建数据集到较少维度的投影。
总结
您如何使用迷你课程? 您喜欢这个速成班吗?