总结
本系列是机器学习课程的第02篇,主要介绍机器学习中专家系统的应用介绍
本门课程的目标
完成一个特定行业的算法应用全过程:
定义问题(Problem Definition) -> 数据收集(Data Collection) -> 数据分割(Dataset Spit up) -> 模型训练(Model Training) -> 模型评估(Model Evaluation) -> 应用部署(System Deployment) -> 改变世界(Impact the world)!
作者:adi0229
链接:「ML笔记」- 机器学习生命周期(Machine Learning Lifecycle)
懂业务+会选择合适的算法+数据处理+算法训练+算法调优+算法融合
+算法评估+持续调优+工程化接口实现
机器学习算法流程
关于机器学习的定义,Tom Michael Mitchell的这段话被广泛引用:
对于某类任务T和性能度量P,如果一个计算机程序在T上其性能P随着经验E而自我完善,那么我们称这个计算机程序从经验E中学习。
机器学习流程
为了更好的理解机器到底是如何获得学习能力的,我们可以思考人类学习的过程,想象一个小孩子学习认知动物的过程,我们带小孩去公园。公园里有很多人在遛狗。简单起见,咱们先考虑二元分类例子。你告诉小孩哪些是狗。假设此时一只猫跑了过来,你告诉他,这个不是狗。久而久之,小孩就会产生认知模式。这个就是“学习”的过程。所形成的认知模式,就是“模型”。训练之后。这时,再跑过来一个动物时,你问小孩,这个是狗吧?他会回答,是/否。这个就叫“预测”。仔细思考小朋友认知事物的例子,我们发现在这个学习过程当中,我们可以把学习过程拆分为如下步骤
1.选择知识即小朋友选择认知动物外貌这样的一个知识,
2.选择学习方法即选择一个合适的方法去学习知识,在例子中我们是通过眼睛辨认这样的方法进行学习,
3学习或记忆,即反复对动物外面进行认知学习的这一过程,
4.运用,小孩进行大量认知记忆的练习后,可以将所知的认知对动物进行辨别,
5.评测学习效果,站在一个客观的角度对学习效果进行评测,
6.知识保存,通过大人的评测后,小孩就会将这个知识保存在自己的脑海中。这不就是一个人类典型的学习过程吗?那么基于这样的一个学习过程,我们是否可以将这个过程复制在机器上呢?其实我们已经这样做了,而构建机器学习的过程,即构建机器学习框架的步骤正和人类学习的步骤是一样的。
(1)在此,我们模仿人类学习的行为方式,将这样的行为方式复制于机器上,并且形成一一对应的关系,从而得到了机器学习的框架,我们仔细了解机器学习框架后会发现,机器学习的步骤是与人类学习行为的步骤一致的,可分为数据的加载,选择模型,模型的训练,模型的预测,模型的评测,模型的保存6个步骤,第一步数据的加载即为选择知识,表示的是我们希望计算机学习什么样的知识(数据),因为机器需要从过往经验中学习知识,因此我们第一步需要做的事就是为其提供可学习的数据。
(2)紧接着第二步我们需要为计算机选择一个学习的模型,即选择一个学习的方法使计算机依据模型进行学习。
(3)第三步模型的训练为为计算机根据设定的方法对数据进行反复训练的过程。
(4)第四步,预测,指计算机再进行大量数据认识的训练后,可以将所知的认知对新事物进行应用,即对未知数据的预测等。
(5)第五步评测,指的是一个客观的角度(测试指标)对计算机学习效果进行评测。
(6)最后是将学习过程进行保存,便于将来使用,通过这样的对应,我们可以发现,机器学习的思想并不复杂,仅仅是对人类在生活中学习成长的一个模拟。
那如何才能实现机器学习模型呢?sklearn是机器学习中一个常用的python第三方模块,自2007年发布以来,scikit-learn已经成为Python重要的机器学习库了。scikit-learn简称sklearn,支持包括分类、回归、降维和聚类四大机器学习算法。还包含了特征提取、数据处理和模型评估三大模块。sklearn是Scipy的扩展,建立在NumPy和matplotlib库的基础上。利用这几大模块的优势,可以大大提高机器学习的效率。sklearn拥有着完善的文档,上手容易,具有着丰富的API,在学术界颇受欢迎。sklearn已经封装了大量的机器学习算法,包括LIBSVM和LIBINEAR。同时sklearn内置了大量数据集,节省了获取和整理数据集的时间。
sklearn库的框架
train_x, train_y, test_x, test_y = getData()
model = somemodel()
model.fit(train_x,train_y)
predictions = model.predict(test_x)
score =score_function(test_y, predictions)
joblib.dump(model, 'filename.pkl')
"""
构建一个机器学习框架似乎并不容易实现,好在我们的scikit-learn模块已经帮我们搭建好,
如上,这简单的六行代码显示了使用scikit-learn模块构建机器学习框架的六个部分,
既数据的加载、选择模型、模型的训练、模型的预测、模型的评测,模型的保存。
其中我们使用
getData方法泛指数据的加载,
somemodel方法泛指选择模型,
fit方法实现训练,
predict方法实现预测,
score_function方法评测模型,
dump方法用于模型保存。
也许我们现在并不明白这些代码的含义,我们将会在接下来的学习中为大家解答。
"""
sklearn实现
第一步使用sklearn导入数据并分割
模块自带数据集,参考
https://sklearn.apachecn.org/
https://blog.csdn.net/u013044310/article/details/103678248
了解sklearn自带的数据集有那些,数据集有哪些属性
了解数据集。
首先我们来了解一下如何为机器学习加载数据,为了方便学习,我们使用scikit-learn机器学习模块自带的数据集进行数据的加载练习,scikit-learn机器学习模块提供了一些模块自带的数据集,
自带的小数据集(packaged dataset):sklearn.datasets.load_<name>
可在线下载的数据集(Downloaded Dataset):sklearn.datasets.fetch_<name>
计算机生成的数据集(Generated Dataset):sklearn.datasets.make_<name>
svmlight/libsvm格式的数据集:sklearn.datasets.load_svmlight_file(...)
这些数据集都可以在官网上查找到demo,例如用于分类的iris、digits数据集和波士顿房价回归等数据集,我们通过以下的例子来了解如何进行数据的加载
#导入数据集模块
from sklearn import datasets
#分别加载iris和digits数据集
iris_dataset = datasets.load_iris() #鸢尾花数据集
print(dir(datasets))
"""
['__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__',
'__package__', '__path__', '__spec__', '_base', '_california_housing', '_covtype', '_kddcup99',
'_lfw', '_olivetti_faces', '_openml', '_rcv1', '_samples_generator', '_species_distributions',
'_svmlight_format_fast', '_svmlight_format_io', '_twenty_newsgroups', 'clear_data_home', 'data',
'descr', 'dump_svmlight_file', 'fetch_20newsgroups', 'fetch_20newsgroups_vectorized',
'fetch_california_housing', 'fetch_covtype', 'fetch_kddcup99', 'fetch_lfw_pairs',
'fetch_lfw_people', 'fetch_olivetti_faces', 'fetch_openml', 'fetch_rcv1',
'fetch_species_distributions', 'get_data_home', 'load_boston', 'load_breast_cancer',
'load_diabetes', 'load_digits', 'load_files', 'load_iris', 'load_linnerud', 'load_sample_image',
'load_sample_images', 'load_svmlight_file', 'load_svmlight_files', 'load_wine', 'make_biclusters',
'make_blobs', 'make_checkerboard', 'make_circles', 'make_classification', 'make_friedman1',
'make_friedman2', 'make_friedman3', 'make_gaussian_quantiles', 'make_hastie_10_2', 'make_low_rank_matrix',
'make_moons', 'make_multilabel_classification', 'make_regression', 'make_s_curve', 'make_sparse_coded_signal',
'make_sparse_spd_matrix', 'make_sparse_uncorrelated', 'make_spd_matrix', 'make_swiss_roll']
"""
print(iris_dataset.keys())
# dict_keys(['data', 'target', 'frame', 'target_names', 'DESCR', 'feature_names', 'filename', 'data_module'])
首先启动一个Python解释器,然后加载iris和digits数据集,数据集是一个类似字典的对象,它保存有关数据集的所有数据和一些样本特征数据。该数据存储在.data成员中,在有监督学习中,一个或多个标记类别存储在.target成员中,例如,在iris数据集中,iris.data保存的是分类的样本特征,iris.target保存的是分类的样本标签,Iris数据集是常用的分类实验数据集,由Fisher, 1936收集整理。Iris也称鸢尾花卉数据集,是一类多重变量分析的数据集。数据集包含150个数据集,分为3类,每类50个数据,每个数据包含4个属性。可通过花萼长度,花萼宽度,花瓣长度,花瓣宽度(Sepal.Length& Sepal.Width& Petal.Length& Petal.Width)4个属性预测鸢尾花卉属于(Setosa,Versicolour,Virginica)三个种类中的哪一类
#使用.data() 和.target()方法熟悉导入的数据结构
print(iris.data)
print(iris.target)
加载完成后,我们可以通过print函数查看iris数据具体数值,iris.data表示数据集内鸢尾花的花萼长度,花萼宽度,花瓣长度,花瓣宽度4个属性,iris.target表示数据集内鸢尾花的真实类别,也就是我们期望从每个鸢尾花属性数据中学得的相应的类别标记
机器学习是从数据的属性中学习经验,并将它们应用到新数据的过程。但是由于使用验证集来选择最终模型,因此最终模型对验证数据的错误率估计是有偏的(小于真实错误率),且在用测试集评估最终模型之后,我们不能进一步调整模型。这就是为什么机器学习中评估算法的普遍实践是把数据分割成训练集(我们从中学习数据的属性)和测试集(我们测试这些性质)。那什么是训练集和测试集呢?
训练集(Training set)作用是用来拟合模型,通过设置分类器的参数,训练分类模型。
测试集(Test set)通过训练,得出最优模型后,使用测试集进行模型预测。用来衡量该最优模型的性能和分类能力。即可以把测试集视为从来不存在的数据集,当已经确定模型后,使用测试集进行模型性能评价。
那测试的数据从何而来?,如果我们自己已经有了一个大的标注数据集,想要完成一个有监督模型的测试,那么通常使用均匀随机抽样的方式,将数据集划分为训练集、测试集,这俩个集合不能有交集。但是由于现实世界中某些原因,或是机密数据,或是稀缺数据,从而导致数据量过少我们只能将少量的数据进行分割,生成训练集和测试集,常见的比例是8:2,当然比例是人为的。从数据的角度来看,2个集合都是同分布的,因此都是具参考性的。
# 使用sklearn分割数据
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test=train_test_split(iris.data,iris.target,test_size=0.4,random_state=0)
print("iris.data[0:5]:\n",iris.data[0:5])
print("iris.target[0:5]:\n",iris.target[0:5])
print("iris.data.shape:",iris.data.shape)
print("iris.target.shape:",iris.target.shape)
print("X_train.shape:",X_train.shape)
print("y_train.shape:",y_train.shape)
print("X_test.shape:",X_test.shape)
print("y_test.shape:",y_test.shape)
输出为:
现在我们来学习如何使用sklearn实现分割数据集,在这里我们使用sklearn.model_selection模块中的train_test_split方法分割成训练数据集和测试数据集,其中我们把参数test_size设置成0.4,表示分配了40%的数据给测试数据集。剩下60%的数据将用于训练数据集,参数random_state=0表示对随机种子的使用情况,而X_train,X_test,y_train,y_test分别为将原始数据iris.data,iris.target按照test_size的数值进行分割后的输出,其中iris.data的60%输出为X_train,iris.data的40%输出为X_test,iris.target的60%输出为y_train,iris.target的40%输出为y_test。
第二步使用sklearn模型的选择
学会加载模型,对于不同类型的数据选择不同的方法(智能算法)进行学习。
在机器学习的算法中存在着实现分类,聚类,回归,降维等功能的模型,而每个模型功能、效率、特性各具不同,如何选择一个合适的模型就变得至关重要,在面对大量的机器学习模型时,我们该如何选择某个机器学习的模型呢?
我们需要思考这样的以下问题:
1.数据的大小、质量及性质,
2.可用计算时间,
3.任务的急迫性,
4.数据的使用用途。
在没有测试过不同算法之前,即使是经验丰富的数据科学家和机器学习算法开发者也都不能分辨出哪种模型性能最好。我们并不提倡一步到位,但是我们确实希望根据一些明确的因素为模型的选择提供一些参考意见,sklearn机器学习模型速查表(官网可查)可帮助你从大量模型之中筛选出解决你的特定问题的模型。
# 第二步使用sklearn模型的选择
from sklearn import svm
svc = svm.SVC(gamma='auto')
本章中我们不会对机器学习的算法机理进行讲解,我们希望在本章中学员学会如何将算法模型实例化,因为sklearn已经将常用的机器学习模型进行了封装,那如何使用代码构建一个模型呢?以上代码表面了我们选择一个分类算法SVC,SVC实现了分类功能 。模型的构造函数以相应模型的参数为参数,但目前我们将把SVC分类模型视为黑箱即可,因此我们发现使用sklearn实现一个模型的实例话相当简单,我们只需要导入相关模块然后依据模型名称进行实例化即可,如python语句svc = svm.SVC()。
第三步使用sklearn模型的训练
接下来我们将了解机器学习训练的过程,从数据中学得模型的过程称为“训练”(learning),这个过程通过执行某个学习模型算法来完成。学得模型对应了关于数据的某种潜在的规律,因此亦称“假设”(hypothesis);这种潜在规律自身,则称为“真相”或“真实”(ground- truth),训练过程就是为了找出或逼近真相。从模型角度而言,模型可以理解为函数。训练模型就是用已有的数据,通过一些方法(最优化或者其他方法)确定函数的参数,参数确定后的函数就是训练的结果,使用模型就是把新的数据代入函数求值。机器学习中的“训练” 过程可以对应到人类的“学习” 过程
#第三步使用sklearn模型的训练
svc.fit(X_train, y_train)
输出为:
在scikit-learn模块中,模型的训练过程是一个Python对象,它使用fit(X, y)函数方法实现,在上图python代码svc.fit(X_train, y_train)中,我们通过向fit方法提供输入训练数据集后即可训练模型。
第四步使用sklearn进行模型的预测
# 第四步使用sklearn进行模型预测
print(svc.predict([[5.84,4.4,6.9,2.5]]))
输出为:
2
在scikit-learn模块中,模型的预测过程是一个Python对象,它predict()函数方法实现,在上图python代码svc.predict()中,我们通过向predict方法提供输入测试数据集后即可通过模型对新数据进行预测。
第五步机器学习评测的指标
学习到此,我们训练完成我们的模型了,同时我们希望了解训练出的模型效果如何,这时我们需要通过一些数学指标来表明其效果,但在此之前了解一下误差的概念。我们把模型的实际预测输出与样本的真实输出之间的差异称为“误差”(error),模型在训练集上的误差称为“训练误差” (training error),在新样本上的误差称为“泛化误差”( generalization error)。显然,我们希望得到泛化误差小的模型。然而,我们事先并不知道新样本是什么样,实际能做的是努力使经验误差最小化。而对于不同的算法我们通常会采用不同的指标来评判,分类算法采用分类指标,回归算法采用回归指标,聚类算法采用聚类指标。
本章中,我们只对评测分类算法和回归算法的指标进行讲解,关于评测聚类算法的指标我们将在无监督学习章节中讲解,分类下我们关心的常用的指标有:
准确率( accuracy),准确率是指对于给定的测试数据集,分类器正确分类的样本数与总样本数之比,假设分类正确的样本数量=70,而总分类样本数量=100,那么精度=70/100=70.00%。
另外一个常用的分类指标为AUC:AUC(Area Under Curve)是一个概率值,当你随机挑选一个正样本以及一个负样本,当前的分类算法根据计算得到的Score值将这个正样本排在负样本前面的概率就是AUC值,而作为一个数值,对应AUC更大的分类器效果更好
本章中,我们只对评测分类算法和回归算法的指标进行讲解,关于评测聚类算法的指标我们将在无监督学习章节中讲解,分类下我们关心的常用的指标有:
准确率( accuracy),准确率是指对于给定的测试数据集,分类器正确分类的样本数与总样本数之比,假设分类正确的样本数量=70,而总分类样本数量=100,那么精度=70/100=70.00%。
另外一个常用的分类指标为AUC:AUC(Area Under Curve)是一个概率值,当你随机挑选一个正样本以及一个负样本,当前的分类算法根据计算得到的Score值将这个正样本排在负样本前面的概率就是AUC值,而作为一个数值,对应AUC更大的分类器效果更好
#第五步机器学习评测的指标
#机器学习库sklearn中,我们使用metrics方法实现:
import numpy as np
from sklearn.metrics import accuracy_score
y_pred = [0, 2, 1, 3]
y_true = [0, 1, 2, 3]
accuracy_score(y_true, y_pred)
输出为:
#第五步机器学习评测的指标
#机器学习库sklearn中,我们使用metrics方法实现:
import numpy as np
from sklearn.metrics import accuracy_score
print("y_test:\n",y_test)
y_pred = svc.predict(X_test)
print("y_pred:\n",y_pred)
accuracy_score(y_test, y_pred)
输出为:
现在我们看看如何实现对分类模型和回归模型的评测。这里使用的是scikit-learn模块中metrics方法实现,metrics模块包括评分函数,性能指标和成对指标以及距离计算,用来计算真实值与预测值之间的预测误差:
以_score结尾的函数,返回一个最大值,越高越好
以_error结尾的函数,返回一个最小值,越小越好;如果使用make_scorer来创建scorer时,将greater_is_better设为False,本例中我们调用了accuracy_score函数,该函数将会计算输入的参数y_pred对于y_true的准确率。而python语句from sklearn.metrics import accuracy_score实现了将accuracy_score函数导入的功能。
从之前的学习中我们了解到模型会先行在训练集上进行训练,通过对模型进行调整使模型的性能达到了最佳状态;但是即使模型在训练集上表现良好,往往其在测试集上可能会出现表现不佳的情况。此时,测试集的反馈足以推翻训练模型,并且度量不再有效地反映模型的泛化性能。为了解决这样的问题,我们必须准备另一部分称为验证集(validation set)的数据集。完成模型后,在验证集中评估模型。如果验证集上的评估实验成功,则在测试集上执行最终评估,但是,如果我们将原始数据进行划分为我们所说的训练集、验证集、测试集,那么我们可用的数据将会大大的减少,为了解决这个问题,我们提出了交叉验证这样的解决办法。
那什么是交叉验证呢?交叉验证 (Cross validation)是将原始数据分成K个子集(一般是均分),将每个子集数据分别做一次测试集 (testing test),其余的K-1组子集数据作为训练集(trainning test),这样会得到K个模型,用这K个模型最终的验证集的分类指标的平均数作为此K-CV下分类器的性能指标。
在交叉验证 (Cross validation)中K一般大于等于2,且每次用k-1个子集的并集作为训练集,余下的那个子集作为测试集;这样就可获得k组训练/测试集,从而可进行k次训练和测试,最终返回的是这个测试结果的均值。而交叉验证 (Cross validation)的优点是对所有的样本都被作为了训练集和测试集,每个样本都被验证一次。其中10-folder通常被最长使用
上图显示了交叉验证的运行过程。这里采用的是10折交叉验证。
#第五步机器学习评测方法:交叉验证 (Cross validation)
#机器学习库sklearn中,我们使用cross_val_score方法实现:
from sklearn.model_selection import cross_val_score
scores = cross_val_score(svc, iris.data, iris.target, cv=5)
scores
输出为:
那如何实现交叉验证算法呢?本节中我们将使用scikit-learn模块实现交叉验证,最简单的实现方法是在模型和数据集上调用 cross_val_score 辅助函数,该函数将会拟合模型和计算连续cv(cv为cross_val_score函数的参数)次的分数(每次不同分割)来估计模型在数据集上的精度,如示例中python语句scores = cross_val_score(knn, iris.data, iris.target, cv=5),其中knn参数为待评估模型,iris.data, iris.target参数为数据集,cv参数为拆分子集数量,通常在默认情况下,每次cross_val_score迭代计算的指标结果是保存在属性scores中的,同时我们可以通过使用scoring参数来选择不同的指标,关于scoring的参数详情设置请参考官方文档
第六步机器学习:模型的保存
当我们的机器学习模型训练完成后,我们可以将我们的模型永久化,这样可以我们就下次可以直接使用我们的模型,避免下次大量数据训练花费过长时间以及方便我们进行模型的转移,而我们会使用pickle文件进行保存,pickle文件只能在python中使用,python中几乎所有的数据类型(列表,字典,集合,类等)都可以用pickle来序列化,且pickle序列化后的数据,可读性差,人一般无法识别。
#第六步机器学习:模型的保存
#机器学习库sklearn中,我们使用joblib方法实现:
# from sklearn.externals import joblib
import joblib
joblib.dump(svc, 'filename.pkl')
svc1 = joblib.load('filename.pkl')
#测试读取后的Model
print(svc1.score(X_test, y_test))
输出为:
模型的保存的实现方法是调用sklearn.externals包中joblib类方法,如PPT中python代码joblib.dump(knn, ‘filename.pkl‘) ,其中joblib类中dump方法的会将参数knn序列化对象,并将结果数据流写入到文件对象中,其中参数knn为待保存的模型,参数‘filename.pkl‘指明pickle文件路径。而代码svc1 = joblib.load(’filename.pkl‘) 实现了反序列化对象过程。即将文件中的数据解析为一个Python对象,通俗而已就是将我们保存的模型在此实例化,并且命名为svc1。其中要注意的是,在load(file)的时候,要让python能够找到类的定义,否则会报错
完整代码
#导入数据集模块
from sklearn import datasets
#分别加载iris和digits数据集
iris_dataset = datasets.load_iris() #鸢尾花数据集
# print(dir(datasets))
# print(iris_dataset.keys())
# dict_keys(['data', 'target', 'frame', 'target_names', 'DESCR', 'feature_names', 'filename', 'data_module'])
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test=train_test_split(iris.data,iris.target,test_size=0.4,random_state=0)
print("iris.data[0:5]:\n",iris.data[0:5])
print("iris.target[0:5]:\n",iris.target[0:5])
print("iris.data.shape:",iris.data.shape)
print("iris.target.shape:",iris.target.shape)
print("X_train.shape:",X_train.shape)
print("y_train.shape:",y_train.shape)
print("X_test.shape:",X_test.shape)
print("y_test.shape:",y_test.shape)
# 第二步使用sklearn模型的选择
from sklearn import svm
svc = svm.SVC(gamma='auto')
#第三步使用sklearn模型的训练
svc.fit(X_train, y_train)
# 第四步使用sklearn进行模型预测
print(svc.predict([[5.84,4.4,6.9,2.5]]))
#第五步机器学习评测的指标
#机器学习库sklearn中,我们使用metrics方法实现:
import numpy as np
from sklearn.metrics import accuracy_score
print("y_test:\n",y_test)
y_pred = svc.predict(X_test)
print("y_pred:\n",y_pred)
print(accuracy_score(y_test, y_pred))
#第五步机器学习评测方法:交叉验证 (Cross validation)
#机器学习库sklearn中,我们使用cross_val_score方法实现:
from sklearn.model_selection import cross_val_score
scores = cross_val_score(svc, iris.data, iris.target, cv=5)
print(scores)
#第六步机器学习:模型的保存
#机器学习库sklearn中,我们使用joblib方法实现:
# from sklearn.externals import joblib
import joblib
joblib.dump(svc, 'filename.pkl')
svc1 = joblib.load('filename.pkl')
#测试读取后的Model
print(svc1.score(X_test, y_test))
输出为:
机器学习中的拟合问题
流行的开源框架
Scikit-Learn是用于机器学习的Python模块,它建立在SciPy之上。基本功能主要被分为六个部分:分类、回归、聚类、数据降维、模型选择、数据预处理。
https://scikit-learn.org/stable/preface.html
GitHub项目地址:
https://github.com/scikit-learn/scikit-learn
Paddle 是 Parallel Distributed Deep Learning 的缩写,中文名字是并行分布式深度学习。paddle 的原意是“用浆划动”,所以 logo 也是两个划船的小人,也就是等待众人划桨的中国 AI 大船。
从2016年9月27日发布至今,其前身是百度于2013年自主研发的易用、高效、灵活、可扩展的深度学习平台,且一直为百度内部工程师研发使用,可以认为是一个类似Facebook支持的PyTorch、Google的TensorFlow等工业优而开源的又一个典范。
https://www.paddlepaddle.org.cn/
TensorFlow是谷歌基于C++开发、发布的第二代机器学习系统。开发目的是用于进行机器学习和深度神经网络的研究。目前Google 的GoogleApp的语音识别、Gmail的自动回复功能、Google Photos的图片搜索等都在使用 TensorFlow 。
官网英文
官网中文
GitHub项目地址:
https://github.com/tensorflow/tensorflow
PyTorch的设计追求最少的封装,尽量避免重复造轮子。不像 TensorFlow 中充斥着session、graph、operation、name_scope、variable、tensor、layer等全新的概念,PyTorch的设计遵循tensor→variable(autograd)→nn.Module 三个由低到高的抽象层次,分别代表高维数组(张量)、自动求导(变量)和神经网络(层/模块),而且这三个抽象之间联系紧密,可以同时进行修改和操作。 简洁的设计带来的另外一个好处就是代码易于理解。PyTorch的源码只有TensorFlow的十分之一左右,更高的抽象、更直观的设计使得PyTorch的源码十分易于阅读。
pytorch官网
GitHub项目地址:
https://pytorch.org/
MindSpore
MindSpore 是华为公司推出的一款开源 AI 计算框架,在国产框架中认知度排第一,而且具备全方位能力,既能够提供特定的能力(如开发大模型,进行科学计算),又能实现全生命周期的 开发(即端到端开发,从训练到部署)。
官网
Spark MLlib是Spark对常用的机器学习算法的实现库,同时包括相关的测试和数据生成器。Spark的设计初衷就是为了支持一些迭代的Job, 这正好符合很多机器学习算法的特点。Spark基于内存的计算模型天生就擅长迭代计算,多个步骤计算直接在内存中完成,只有在必要时才会操作磁盘和网络。
官网
GitHub项目地址:
https://github.com/apache/spark
确定方向过程
针对完全没有基础的同学们
1.确定机器学习的应用领域有哪些
2.查找机器学习的算法应用有哪些
3.确定想要研究的领域极其对应的算法
4.通过招聘网站和论文等确定具体的技术
5.了解业务流程,查找数据
6.复现经典算法
7.持续优化,并尝试与对应企业人员沟通心得
8.企业给出反馈