大数据分析培训课程机器学习这份简单易懂的指南对开始进行项目所需的所有机器学习先决条件进行了结构化概述,包括从导入和清除数据到建模和生产的完整数据管道。
我们都从考虑数据集或目标入手。一旦我们发现,收集或刮我们的数据,我们将其拉起,并见证了压倒性的视线号码,更多号码,类别,也许有些话无情的细胞!幼稚的想法摆在我们的脑海中,利用我们的机器学习能力来处理这种纠结的混乱……但是快速搜索显示了在训练模型之前我们需要考虑的许多任务 !
一旦克服了不守规矩的数据带来的冲击,我们就会寻找与强大的克星战斗的方式。我们首先尝试将数据导入Python。它在纸上比较简单,但是过程可能会稍有复杂。尽管如此,我们只需要付出一点努力。
不浪费时间,我们就开始进行数据清理,以消除虚假信息并暴露出美丽的事物。我们的方法从简单开始-观察并删除。它工作了好几次,但后来我们意识到...它确实不能使我们伸张正义!但是,为了处理混乱,我们找到了一个强大的工具可以添加到我们的武器库中:图表!使用我们的图形,我们可以了解我们的数据,其中的模式以及缺少的地方。我们可以插值 (填写)或删除丢失的数据。
最后,我们应对我们高度期待的挑战,即数据建模!通过少量研究,我们发现了常用的策略和模型。破译我们应该使用哪一个有点困难,但是我们仍然设法弄清楚并弄清楚了所有这些!
但是,如果不做一些令人印象深刻的事情,我们就无法完成一个项目。因此最终产品网站应用程序甚至报告将使我们走得更远!我们知道第一印象很重要,因此我们修复了GitHub存储库,并确保对所有内容进行了充分的记录和解释。现在,我们终于可以向全世界展示我们的辛勤工作!
第1章-导入数据
数据具有各种形状和大小,因此我们用于将所有内容转换为代码的过程通常会有所不同。
数据清理的难点不是编码或理论,而是我们的准备!当我们第一次开始一个新项目并下载我们的数据集时,可能很想打开代码编辑器并开始输入...但这对我们没有任何好处。如果要抢先一步,我们需要为数据的最佳和最差部分做好准备。为此,我们需要通过手动检查电子表格来开始基本操作。一旦了解了数据的基本格式(文件类型以及所有特殊性),我们就可以将其全部放入Python中。
当我们很幸运并且只有一个电子表格时,我们可以使用Pandas的 read_csv 函数(让它知道我们的数据在哪里):
pd.read_csv(“ file_path.csv”)
实际上,我们遇到了更复杂的情况,因此请注意:
a)该文件以不需要的信息开头(我们需要跳过)
b)我们只想导入几列
c)我们想重命名我们的专栏
d)数据包括日期
e)我们希望将来自多个来源的数据合并到一个地方
f)数据可以分组在一起
尽管我们正在讨论各种场景,但是通常一次只能处理几个场景。
我们的前几个问题(导入数据/重命名列的特定部分)很容易使用一些参数来处理,例如要跳过的行数,要导入的特定列以及我们的列名:
pd.read_csv(“ file_path.csv”,skiprows = 5,usecols = [0,1],名称= [“ Column1”,“ Column2”])
每当我们的数据分散在多个文件中时,我们都可以使用Pandas concat 函数将它们合并 。该 CONCAT 函数组合的清单 数据框的一起:
my_spreadsheets = [pd.read_csv(“ first_spreadsheet.csv”),pd.read_csv(“ second_spreadsheet.csv”))]
pd.concat(my_spreadsheets,ignore_index = True)
我们解析以 合并 一个电子表格列表(就像以前一样导入)。当然,可以以任何方式获得列表(因此,花哨的列表理解或每个文件的临时列表也同样适用),但请记住, 我们需要数据帧,而不是文件名/路径!
如果没有CSV文件,Pandas仍然可以使用!我们可以只 换出 read_csv 为 read_excel, read_sql或其他 选项。
在所有数据都位于Pandas数据框中之后,我们需要仔细检查数据的格式是否正确。实际上,这意味着检查每个系列数据类型并确保它们不是通用对象。我们这样做是为了确保我们可以将Pandas内置功能用于数字,分类和日期/时间值。为此,只需运行 DataFrame.dtypes即可。如果输出看起来合理(即数字是数字,类别是类别等),那么我们应该继续进行。但是,通常情况并非如此,因为我们需要更改数据类型!这可以通过Pandas DataFrame.astype完成 。如果这不起作用,则应为该特定转换提供另一个Pandas函数:
data [“ Rating”] = data [“ Rating”]。as_type(“ category”)
data [“ Number”] = pd.to_numeric(data [“ Number”])
data [“ Date”] = pd.to_datetime(data [“ Date”])
data [“ Date”] = pd.to_datetime(data [[“ Year”,“ Month”,“ Day”,“ Hour”,“ Minute”]])
如果我们需要分析单独的数据组(即,也许我们的数据按国家划分),则可以使用Pandas groupby。我们可以使用 groupby 选择特定的数据,并分别在每个组上运行函数:
data.groupby(“ Country”)。get_group(“ Australia”)
data.groupby(“ Country”)。mean()
其他更利基的技巧,例如多/层次索引,在特定情况下也可能有所帮助,但在理解和使用方面则更加棘手。
第2章-数据清理
数据是有用的,数据是必要的。但是,它 必须干净而且要点!如果我们的数据无处不在,那么它对我们的机器学习模型将毫无用处。
每个人都会因缺少数据而发疯,但是隧道尽头总是一片曙光。
进行数据清理的最简单,最快的方法是问自己:
数据中的哪些功能会影响最终目标?
最终目标是指我们要进行预测,分类或分析的任何变量。这样做的目的是缩小我们的范围,而不会陷入无用信息的泥潭。
一旦知道了我们的主要目标特征是什么,我们就可以尝试查找模式,关系,丢失的数据等等。绘制图形的一种简单直观的方法!快速使用Pandas绘制数据集中的每个变量,然后尝试查看所有内容适合的位置。
一旦我们确定了数据中潜在的问题或趋势,就可以尝试对其进行修复。通常,我们有以下选择:
a)删除缺失的条目
b)删除整列数据
c)填写缺失的数据条目
d)重新采样数据(即更改分辨率)
e)收集更多信息
为了从识别丢失的数据转变为选择处理数据的方式,我们需要考虑它如何影响最终目标。有了缺失的数据,我们会删除所有对最终结果似乎没有重大影响的东西(即,我们无法找到有意义的模式),或者似乎 缺少太多东西无法获得价值的东西。有时,我们也决定删除少量丢失的数据(因为比填充数据更容易)。
如果我们决定摆脱信息, 则可以使用Pandas DataFrame.drop。它从数据框中删除列或行。它很容易使用,但是请记住, 熊猫默认情况下不会从源数据框中修改/删除数据,因此 必须指定inplace = True。可能需要注意的是, axis 参数指定要删除的是行还是列。
当不删除整列,或者特别针对丢失的数据时,依赖一些漂亮的Pandas函数通常会很有用。为了删除空值,可以使用DataFrame.dropna 。请记住,尽管默认情况下 dropna会 完全删除所有缺失的值。然而,参数设置或者 如何 给 所有 或设定阈值(脱粒,代表许多空值是如何要求它删除)可以弥补这一点。
如果我们有少量不规则的缺失值,则可以用几种方法填充它们。最简单的是 DataFrame.fillna ,它将缺少的值设置为某个预设值。更为复杂但灵活的选项是使用DataFrame.interpolate进行插值 。插值基本上允许任何人只需设置 方法 ,他们想更换每个空值。这些包括上一个/下一个值,线性和时间(根据数据推断出最后两个)。无论何时,只要有时间,时间就是自然的选择,否则,请根据要插值的数据量和复杂程度做出合理的选择。
data [“ Column”]。fillna(0,inplace = True)
data [[“ Column”]] = data [[“ Column”]]。interpolate(method =“ linear”)
如上所示,需要在纯粹包含缺少数据的列的数据帧中传递插值 (否则将引发错误)。
每当我们看到定期丢失的数据或使用不同时标的多个数据源时(例如确保可以组合分钟和小时的测量结果),重采样就很有用。直观地理解重采样可能会有点困难,但是当您在特定时间范围内平均测量值时,这是必不可少的。例如,我们可以通过指定要获取每个月值的平均值来获取月值:
data.resample(“ M”)。mean()
“ M”代表月份,可以用“ Y”代替年份和其他选项。
尽管数据清理过程可能具有很大的挑战性,但是如果我们记住我们的初衷,它将变成更加逻辑和直接的任务!如果我们仍然没有所需的数据,则可能需要回到第一阶段并收集更多数据。 请注意,缺少数据表示数据收集存在问题,因此仔细考虑并记录发生的位置非常有用。
为了完成操作,Pandas的 unique 和 value_counts 函数可用于确定要直接删除的功能以及进一步绘制和研究的功能。
第3章-可视化
可视化听起来很简单,确实如此,但是很难... 不过于复杂。对于我们而言,将地块视为创建琐事实在太容易了。但是,这些坏孩子做得非常好-直观地展示了我们数据的内部运作方式!只记得:
我们对数据进行图形化处理,以查找并解释一切工作原理。
因此,当您遇到想法或不确定要做什么时,我们基本上总是可以退回到 识别有用的模式和有意义的关系上。这似乎有些无聊,但确实很有用。
我们的目标不是绘制精美的六边形图,而是描绘正在发生的事情,因此 绝对任何人都 可以简单地解释一个复杂的系统!
不可否认的是,一些技术有用:
a)数据过多时重新采样
b)当地块比例不同时的辅助轴
c)当我们的数据可以分类时进行分组
d)要开始绘制图形,只需 在任何系列或数据帧上使用Pandas .plot()!当我们需要更多时,我们可以深入研究MatPlotLib,Seaborn或交互式绘图库。
data.plot(x =“列1名称”,y =“列2名称”,kind =“栏”,figsize =(10,10))
data.plot(x =“列1名称”,y =“列3名称”,secondary_y = True)
data.hist()
data.groupby(“ group”)。boxplot()
在90%的时间里,此基本功能就足够了(此处提供更多信息),而如果没有,搜索应该揭示如何 绘制特别奇异的图。
第4章-建模
4.1)简要概述
现在终于到了有趣的东西-产生结果。训练scikit学习模型似乎 很简单,但是没有人详细介绍!因此,说实话,并非每个数据集和模型都不相等。
我们的建模方法会根据我们的数据而大相径庭。有三个特别重要的因素:
a)问题类型
b)量数据
c)数据复杂度
问题的类型归结为我们是要预测类/标签(称为 分类),值(称为 回归)还是对数据进行分组(称为 聚类)。如果我们试图在已经有我们要预测的示例的数据集上训练模型,那么我们将模型称为监督的,如果不是,则称其为 无监督的。可用数据量及其复杂程度预示了模型将足够简单。 具有更多功能(即列)的数据往往更复杂。
解释复杂性的关键是要了解哪些模型 对我们的数据而言太好或太坏。
模特 的合身度可为 我们提供这一信息!如果模型难以解释我们的数据(过于简单),我们可以说它 不合适,而如果模型完全过大(过于复杂),我们就说它 过度适合。我们可以将其视为从什么都不学到记忆一切的频谱。我们需要保持平衡,以确保我们的模型 能够将 我们的结论归纳 为新信息。这通常称为偏差方差折衷。 请注意,复杂度也会影响模型的可解释性。
复杂的模型需要花费大量的时间进行训练,尤其是对于大型数据集。因此,升级该计算机,隔夜运行模型,然后放松一会儿!
制备
4.2)拆分数据
在训练模型之前,请务必注意,我们将需要一些数据集对其进行测试(因此我们知道其性能如何)。因此,我们经常将数据集划分为 单独的训练和测试集。这使我们能够测试模型对通用的新数据的泛化程度。这通常是可行的,因为我们知道我们的数据可以很好地代表现实世界。
实际的测试数据量并不重要,但是经常使用80%的训练和20%的测试。
在带有Scikit的Python中,学习 train_test_split 函数可以做到这一点:
train_data,test_data = train_test_split(数据)
train_data,test_data = train_test_split(数据)
交叉验证是将数据集分为多个折叠(即原始数据集的子集或部分)的地方。 与使用单个测试/验证集相比,这往往更健壮并能 抵抗过度拟合!几个scikit-learn函数可帮助进行 交叉验证。但是,通常是直接通过网格或随机搜索(如下所述)完成的。
cross_val_score(模型,输入数据,输出数据,cv = 5)
cross_val_score(模型,输入数据,输出数据,cv = 5)
4.3)超参数调整
我们的模型无法解释某些因素,因此我们 设置了某些超参数。这些模型的模型各不相同,但我们可以通过人工试验和错误,也可以通过诸如网格或随机搜索之类的简单算法找到最佳值。使用网格搜索,我们尝试所有可能的值(蛮力),并通过某种分布/选择来随机搜索随机值。两种方法通常都使用交叉验证。
scikit-learn中的网格搜索通过参数 字典进行。每个输入键代表要调整的超参数,值(列表或元组)是要选择的值的选择:
参数= {'内核':('线性','rbf'),'C':[1,10]}
型号= = SVC()
网格= GridSearchCV(模型,param_grid =参数)
创建网格后,可以使用它来训练模型并提取分数:
grid.fit(train_input,train_output)
best_score,best_depth = grid.best_score_,grid.best_params_
这里重要的是要记住,我们需要进行 培训而不是测试数据。即使使用交叉验证来测试模型,我们最终还是要尽力使训练数据最合适,并且随后将继续在测试集上测试每个模型:
test_predictions = grid.predict(test_input)
在scikit-learn中,随机搜索的工作原理类似,但由于我们需要知道每个超参数采用哪种分布类型而变得稍微复杂一些。尽管从理论上讲,它可以更快地产生相同或更好的结果,但这种情况因情况而异。 为了简单起见,最好坚持使用网格搜索。
4.4)型号选择
4.4.1)使用模型
使用scikit-learn,就像找到我们所需的模型名称然后为它创建变量一样简单。检查文档的链接以获取更多详细信息!例如
support_vector_regressor = SVR()
4.4.2)基本选择
线性/逻辑回归
线性回归 试图将 一条直线拟合 到我们的数据。这是最基本和最基本的模型。线性回归有多种变体,例如套索和岭回归(这是防止过度拟合的正则化方法)。多项式回归可用于拟合更高阶的曲线(如抛物线和其他曲线)。Logistic回归是可用于分类的另一个变体。
支持向量机
就像线性/逻辑回归一样, 支持向量机(SVM) 尝试将直线或曲线拟合到数据点。但是,使用SVM的目的是最大化边界和每个点之间的距离(而不是使线/曲线穿过每个点)。
支持向量机的主要优点是它们使用不同内核的能力 。内核是一种计算相似度的函数。这些内核允许线性和非线性数据,同时保持相当高的效率。内核将输入映射到更高维的空间,因此出现边界。对于大量功能,此过程通常不可行。神经网络或其他模型将可能是更好的选择!
神经网络
所有的嗡嗡声总是与深度学习和 神经网络有关。它们是复杂,缓慢且资源密集的模型,可用于复杂数据。但是,当遇到大型非结构化数据集时,它们非常有用。
使用神经网络时,请确保当心过度安装。一种简单的方法是通过跟踪误差随时间的变化(称为学习曲线)。
深度学习是一个极其丰富的领域,因此这里有太多要讨论的内容。实际上,scikit-learn是一个机器学习库,几乎没有深度学习能力(与PyTorch 或 TensorFlow相比 )。
决策树
决策树 是建立关系模型的简单快捷方法。从根本上讲,它们是 决策树 ,有助于确定数据点所属的类或标签。决策树也可以用于回归问题。尽管很简单,但是为了避免过度拟合,必须选择几个超参数。通常,所有这些都与树的深度和要做出的决策数量有关。
K均值
我们可以 使用 k-means将未标记的数据分组为几个群集。通常,存在的簇数是选择的超参数。
K-means通过尝试优化(减少)称为惯性的某些标准(即函数)而起作用。可以认为是试图最小化一组 质心到 每个数据点的距离。
4.5)合奏
随机森林
随机森林是在数据的随机子集上训练的多个决策树的组合(引导)。此过程称为装袋,可让随机森林对复杂数据获得良好的拟合度(低偏差和低方差)。
其背后的理由可以比作民主。
对于 回归 问题,我们对每个决策树的输出求平均,对于分类,我们选择最受欢迎的决策树 。这可能并不总是可行,但我们通常会假设会这样做 (尤其是对于具有多列的大型数据集)。
随机森林的另一个优点是,微不足道的功能不应因为类似民主的引导过程而对性能产生负面影响!
超参数选择与决策树的选择相同,但决策树的数量也是如此。由于上述原因,更多的树木等于更少的过度拟合!
请注意,随机森林使用随机子集替换行和列!
4.6)梯度提升
像AdaBoost或XGBoost这样的集成模型 通过将一个模型堆叠在另一个模型上来工作。这里的假设是,每个连续的弱学习者都将纠正前一个学习者的缺陷(因此称为提升)。因此,模型的组合应该提供每个模型的优点而没有潜在的陷阱。
迭代方法意味着先前模型的性能会影响当前模型,而更好的模型将具有更高的优先级。增强模型的性能略好于装袋模型(也称为随机森林),但过拟合的可能性也更高。scikit-learn库为分类 和 回归提供AdaBoost 。
第五章-生产
这是该过程的最后但可能是最重要的部分。我们已经完成了所有这些工作,因此我们需要加倍努力,创造出令人印象深刻的东西!
有多种选择。 Streamlit 是面向数据的网站的令人兴奋的选择,并且Kotlin,Swift和Dart等工具可用于Android / IOS开发。带有VueJS之类的框架的JavaScript也可以用于提高灵活性。
在尝试了大多数方法之后,老实说,我建议您坚持使用Streamlit,因为它比其他方法容易得多!
在这里重要的是从愿景开始(越简单越好),然后尝试找出哪些部分最重要。然后尝试专门处理这些问题。继续直到完成!对于网站,将需要像Heroku这样的托管服务 ,因此世界其他地方可以看到我们所有辛勤工作的惊人最终产品。
即使以上所有选项都不适合这种情况,但也必须包含一份报告或一篇文章,其中包括我们已完成的工作,所学的内容以及任何建议或教训,以及记录良好的GitHub存储库! 确保自述文件是最新的。
填写下面表单即可预约申请免费试听!怕钱不够?可先就业挣钱后再付学费! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可推荐就业!
©2007-2022/ www.aaa-cg.com.cn 北京漫动者数字科技有限公司 备案号: 京ICP备12034770号 监督电话:010-53672995 邮箱:bjaaa@aaaedu.cc