机器学习算法(五):基于企鹅数据集的决策树分类预测

本我的项目链接:https://www.heywhale.com/home/column/64141d6b1c8c8b518ba97dcc

1 逻决策树的介绍和利用

1.1 决策树的介绍

决策树是一种常见的分类模型,在金融风控、医疗辅助诊断等诸多行业具备较为宽泛的利用。决策树的核心思想是基于树结构对数据进行划分,这种思维是人类解决问题时的本能办法。例如在婚恋市场中,女方通常会先询问男方是否有房产,如果有房产再理解是否有车产,如果有车产再看是否有稳固工作……最初得出是否要深刻理解的判断。

次要利用:

因为决策树模型中自变量与因变量的非线性关系以及决策树简略的计算方法,使得它成为集成学习中最为宽泛应用的基模型。梯度晋升树(GBDT),XGBoost以及LightGBM等先进的集成模型都采纳了决策树作为基模型,在广告计算、CTR预估、金融风控等畛域大放异彩,成为当今与神经网络等量齐观的简单模型,更是数据挖掘较量中的常客。在新的钻研中,南京大学周志华传授提出一种多粒度级联森林模型,发明了一种全新的基于决策树的深度集成办法,为咱们提供了决策树倒退的另一种可能。

同时决策树在一些明确须要可解释性或者提取分类规定的场景中被广泛应用,而其余机器学习模型在这一点很难做到。例如在医疗辅助零碎中,为了不便业余人员发现错误,经常将决策树算法用于辅助病症检测。例如在一个预测哮喘患者的模型中,医生发现测试的许多高级模型的成果十分差。在他们运行了一个决策树模型后发现,算法认为激烈咳嗽的病人患哮喘的危险很小。但医生十分分明激烈咳嗽个别都会被立即查看医治,这意味着患有激烈咳嗽的哮喘病人都会马上失去收治。用于建模的数据认为这类病人危险很小,是因为所有这类病人都失去了及时医治,所以极少有人在此之后患病或死亡。

1.2 相干流程

  • 理解 决策树 的理论知识
  • 把握 决策树 的 sklearn 函数调用并将其使用在企鹅数据集的预测中

Part1 Demo实际

  • Step1:库函数导入
  • Step2:模型训练
  • Step3:数据和模型可视化
  • Step4:模型预测

Part2 基于企鹅(penguins)数据集的决策树分类实际

  • Step1:库函数导入
  • Step2:数据读取/载入
  • Step3:数据信息简略查看
  • Step4:可视化形容
  • Step5:利用 决策树模型 在二分类上 进行训练和预测
  • Step6:利用 决策树模型 在三分类(多分类)上 进行训练和预测

3 算法实战

3.1Demo实际

Step1: 库函数导入

##  根底函数库import numpy as np ## 导入画图库import matplotlib.pyplot as pltimport seaborn as sns## 导入决策树模型函数from sklearn.tree import DecisionTreeClassifierfrom sklearn import tree

Step2: 训练模型

##Demo演示LogisticRegression分类## 结构数据集x_fearures = np.array([[-1, -2], [-2, -1], [-3, -2], [1, 3], [2, 1], [3, 2]])y_label = np.array([0, 1, 0, 1, 0, 1])## 调用决策树回归模型tree_clf = DecisionTreeClassifier()## 调用决策树模型拟合结构的数据集tree_clf = tree_clf.fit(x_fearures, y_label)

Step3: 数据和模型可视化(须要用到graphviz可视化库)

## 可视化结构的数据样本点plt.figure()plt.scatter(x_fearures[:,0],x_fearures[:,1], c=y_label, s=50, cmap='viridis')plt.title('Dataset')plt.show()

## 可视化决策树import graphvizdot_data = tree.export_graphviz(tree_clf, out_file=None)graph = graphviz.Source(dot_data)graph.render("pengunis")
'pengunis.pdf'

Step4:模型预测

## 创立新样本x_fearures_new1 = np.array([[0, -1]])x_fearures_new2 = np.array([[2, 1]])## 在训练集和测试集上散布利用训练好的模型进行预测y_label_new1_predict = tree_clf.predict(x_fearures_new1)y_label_new2_predict = tree_clf.predict(x_fearures_new2)print('The New point 1 predict class:\n',y_label_new1_predict)print('The New point 2 predict class:\n',y_label_new2_predict)
The New point 1 predict class: [1]The New point 2 predict class: [0]

3.2 基于penguins_raw数据集的决策树实战

在实际的最开始,咱们首先须要导入一些根底的函数库包含:numpy (Python进行科学计算的根底软件包),pandas(pandas是一种疾速,弱小,灵便且易于应用的开源数据分析和解决工具),matplotlib和seaborn绘图。

#下载须要用到的数据集!wget https://tianchi-media.oss-cn-beijing.aliyuncs.com/DSW/6tree/penguins_raw.csv
--2023-03-22 16:21:32--  https://tianchi-media.oss-cn-beijing.aliyuncs.com/DSW/6tree/penguins_raw.csv正在解析主机 tianchi-media.oss-cn-beijing.aliyuncs.com (tianchi-media.oss-cn-beijing.aliyuncs.com)... 49.7.22.39正在连接 tianchi-media.oss-cn-beijing.aliyuncs.com (tianchi-media.oss-cn-beijing.aliyuncs.com)|49.7.22.39|:443... 已连贯。已收回 HTTP 申请,正在期待回应... 200 OK长度: 53098 (52K) [text/csv]正在保留至: “penguins_raw.csv”penguins_raw.csv    100%[===================>]  51.85K  --.-KB/s    in 0.04s   2023-03-22 16:21:33 (1.23 MB/s) - 已保留 “penguins_raw.csv” [53098/53098])

Step1:函数库导入

##  根底函数库import numpy as np import pandas as pd## 绘图函数库import matplotlib.pyplot as pltimport seaborn as sns

本次咱们抉择企鹅数据(palmerpenguins)进行办法的尝试训练,该数据集一共蕴含8个变量,其中7个特色变量,1个指标分类变量。共有150个样本,指标变量为 企鹅的类别 其都属于企鹅类的三个亚属,别离是(Adélie, Chinstrap and Gentoo)。蕴含的三种种企鹅的七个特色,别离是所在岛屿,嘴巴长度,嘴巴深度,脚蹼长度,身材体积,性别以及年龄。

变量形容
speciesa factor denoting penguin species
islanda factor denoting island in Palmer Archipelago, Antarctica
bill_length_mma number denoting bill length
bill_depth_mma number denoting bill depth
flipper_length_mman integer denoting flipper length
body_mass_gan integer denoting body mass
sexa factor denoting penguin sex
yearan integer denoting the study year

Step2:数据读取/载入

## 咱们利用Pandas自带的read_csv函数读取并转化为DataFrame格局data = pd.read_csv('./penguins_raw.csv')
## 为了不便咱们仅选取四个简略的特色,有趣味的同学能够钻研下其余特色的含意以及应用办法data = data[['Species','Culmen Length (mm)','Culmen Depth (mm)',            'Flipper Length (mm)','Body Mass (g)']]

Step3:数据信息简略查看

## 利用.info()查看数据的整体信息data.info()
<class 'pandas.core.frame.DataFrame'>RangeIndex: 344 entries, 0 to 343Data columns (total 5 columns): #   Column               Non-Null Count  Dtype  ---  ------               --------------  -----   0   Species              344 non-null    object  1   Culmen Length (mm)   342 non-null    float64 2   Culmen Depth (mm)    342 non-null    float64 3   Flipper Length (mm)  342 non-null    float64 4   Body Mass (g)        342 non-null    float64dtypes: float64(4), object(1)memory usage: 13.6+ KB
## 进行简略的数据查看,咱们能够利用 .head() 头部.tail()尾部data.head()

<div>
<style scoped>

.dataframe tbody tr th:only-of-type {    vertical-align: middle;}.dataframe tbody tr th {    vertical-align: top;}.dataframe thead th {    text-align: right;}

</style>

SpeciesCulmen Length (mm)Culmen Depth (mm)Flipper Length (mm)Body Mass (g)
0Adelie Penguin (Pygoscelis adeliae)39.118.7181.03750.0
1Adelie Penguin (Pygoscelis adeliae)39.517.4186.03800.0
2Adelie Penguin (Pygoscelis adeliae)40.318.0195.03250.0
3Adelie Penguin (Pygoscelis adeliae)NaNNaNNaNNaN
4Adelie Penguin (Pygoscelis adeliae)36.719.3193.03450.0

</div>

这里咱们发现数据集中存在NaN,个别的咱们认为NaN在数据集中代表了缺失值,可能是数据采集或解决时产生的一种谬误。这里咱们采纳-1将缺失值进行填补,还有其余例如“中位数填补、平均数填补”的缺失值解决办法有趣味的同学也能够尝试。

data = data.fillna(-1)
data.tail()

<div>
<style scoped>

.dataframe tbody tr th:only-of-type {    vertical-align: middle;}.dataframe tbody tr th {    vertical-align: top;}.dataframe thead th {    text-align: right;}

</style>

SpeciesCulmen Length (mm)Culmen Depth (mm)Flipper Length (mm)Body Mass (g)
339Chinstrap penguin (Pygoscelis antarctica)55.819.8207.04000.0
340Chinstrap penguin (Pygoscelis antarctica)43.518.1202.03400.0
341Chinstrap penguin (Pygoscelis antarctica)49.618.2193.03775.0
342Chinstrap penguin (Pygoscelis antarctica)50.819.0210.04100.0
343Chinstrap penguin (Pygoscelis antarctica)50.218.7198.03775.0

</div>

## 其对应的类别标签为'Adelie Penguin', 'Gentoo penguin', 'Chinstrap penguin'三种不同企鹅的类别。data['Species'].unique()
array(['Adelie Penguin (Pygoscelis adeliae)',       'Gentoo penguin (Pygoscelis papua)',       'Chinstrap penguin (Pygoscelis antarctica)'], dtype=object)
## 利用value_counts函数查看每个类别数量pd.Series(data['Species']).value_counts()
Adelie Penguin (Pygoscelis adeliae)          152Gentoo penguin (Pygoscelis papua)            124Chinstrap penguin (Pygoscelis antarctica)     68Name: Species, dtype: int64
## 对于特色进行一些统计形容data.describe()

<div>
<style scoped>

.dataframe tbody tr th:only-of-type {    vertical-align: middle;}.dataframe tbody tr th {    vertical-align: top;}.dataframe thead th {    text-align: right;}

</style>

Culmen Length (mm)Culmen Depth (mm)Flipper Length (mm)Body Mass (g)
count344.000000344.000000344.000000344.000000
mean43.66075617.045640199.7412794177.319767
std6.4289572.40561420.806759861.263227
min-1.000000-1.000000-1.000000-1.000000
25%39.20000015.500000190.0000003550.000000
50%44.25000017.300000197.0000004025.000000
75%48.50000018.700000213.0000004750.000000
max59.60000021.500000231.0000006300.000000

</div>

Step4:可视化形容

## 特色与标签组合的散点可视化sns.pairplot(data=data, diag_kind='hist', hue= 'Species')plt.show()

从上图能够发现,在2D状况下不同的特色组合对于不同类别的企鹅的散点散布,以及大略的辨别能力。Culmen Lenth与其余特色的组合散点的重合较少,所以对于数据集的划分能力最好。

咱们发现

'''为了不便咱们将标签转化为数字       'Adelie Penguin (Pygoscelis adeliae)'        ------0       'Gentoo penguin (Pygoscelis papua)'          ------1       'Chinstrap penguin (Pygoscelis antarctica)   ------2 '''def trans(x):    if x == data['Species'].unique()[0]:        return 0    if x == data['Species'].unique()[1]:        return 1    if x == data['Species'].unique()[2]:        return 2data['Species'] = data['Species'].apply(trans)
for col in data.columns:    if col != 'Species':        sns.boxplot(x='Species', y=col, saturation=0.5, palette='pastel', data=data)        plt.title(col)        plt.show()




利用箱型图咱们也能够失去不同类别在不同特色上的散布差别状况。

# 选取其前三个特色绘制三维散点图from mpl_toolkits.mplot3d import Axes3Dfig = plt.figure(figsize=(10,8))ax = fig.add_subplot(111, projection='3d')data_class0 = data[data['Species']==0].valuesdata_class1 = data[data['Species']==1].valuesdata_class2 = data[data['Species']==2].values# 'setosa'(0), 'versicolor'(1), 'virginica'(2)ax.scatter(data_class0[:,0], data_class0[:,1], data_class0[:,2],label=data['Species'].unique()[0])ax.scatter(data_class1[:,0], data_class1[:,1], data_class1[:,2],label=data['Species'].unique()[1])ax.scatter(data_class2[:,0], data_class2[:,1], data_class2[:,2],label=data['Species'].unique()[2])plt.legend()plt.show()

Step5:利用 决策树模型 在二分类上 进行训练和预测

## 为了正确评估模型性能,将数据划分为训练集和测试集,并在训练集上训练模型,在测试集上验证模型性能。from sklearn.model_selection import train_test_split## 抉择其类别为0和1的样本 (不包含类别为2的样本)data_target_part = data[data['Species'].isin([0,1])][['Species']]data_features_part = data[data['Species'].isin([0,1])][['Culmen Length (mm)','Culmen Depth (mm)',            'Flipper Length (mm)','Body Mass (g)']]## 测试集大小为20%, 80%/20%分x_train, x_test, y_train, y_test = train_test_split(data_features_part, data_target_part, test_size = 0.2, random_state = 2020)
## 从sklearn中导入决策树模型from sklearn.tree import DecisionTreeClassifierfrom sklearn import tree## 定义 决策树模型 clf = DecisionTreeClassifier(criterion='entropy')# 在训练集上训练决策树模型clf.fit(x_train, y_train)
DecisionTreeClassifier(ccp_alpha=0.0, class_weight=None, criterion='entropy',                       max_depth=None, max_features=None, max_leaf_nodes=None,                       min_impurity_decrease=0.0, min_impurity_split=None,                       min_samples_leaf=1, min_samples_split=2,                       min_weight_fraction_leaf=0.0, presort='deprecated',                       random_state=None, splitter='best')
## 可视化import graphvizdot_data = tree.export_graphviz(clf, out_file=None)graph = graphviz.Source(dot_data)graph.render("penguins")
'penguins.pdf'
## 在训练集和测试集上散布利用训练好的模型进行预测train_predict = clf.predict(x_train)test_predict = clf.predict(x_test)from sklearn import metrics## 利用accuracy(准确度)【预测正确的样本数目占总预测样本数目标比例】评估模型成果print('The accuracy of the Logistic Regression is:',metrics.accuracy_score(y_train,train_predict))print('The accuracy of the Logistic Regression is:',metrics.accuracy_score(y_test,test_predict))## 查看混同矩阵 (预测值和实在值的各类状况统计矩阵)confusion_matrix_result = metrics.confusion_matrix(test_predict,y_test)print('The confusion matrix result:\n',confusion_matrix_result)# 利用热力求对于后果进行可视化plt.figure(figsize=(8, 6))sns.heatmap(confusion_matrix_result, annot=True, cmap='Blues')plt.xlabel('Predicted labels')plt.ylabel('True labels')plt.show()
The accuracy of the Logistic Regression is: 0.9954545454545455The accuracy of the Logistic Regression is: 1.0The confusion matrix result: [[31  0] [ 0 25]]

咱们能够发现其准确度为1,代表所有的样本都预测正确了。

Step6:利用 决策树模型 在三分类(多分类)上 进行训练和预测

## 测试集大小为20%, 80%/20%分x_train, x_test, y_train, y_test = train_test_split(data[['Culmen Length (mm)','Culmen Depth (mm)',            'Flipper Length (mm)','Body Mass (g)']], data[['Species']], test_size = 0.2, random_state = 2020)## 定义 决策树模型 clf = DecisionTreeClassifier()# 在训练集上训练决策树模型clf.fit(x_train, y_train)
DecisionTreeClassifier(ccp_alpha=0.0, class_weight=None, criterion='gini',                       max_depth=None, max_features=None, max_leaf_nodes=None,                       min_impurity_decrease=0.0, min_impurity_split=None,                       min_samples_leaf=1, min_samples_split=2,                       min_weight_fraction_leaf=0.0, presort='deprecated',                       random_state=None, splitter='best')
## 在训练集和测试集上散布利用训练好的模型进行预测train_predict = clf.predict(x_train)test_predict = clf.predict(x_test)## 因为决策树模型是概率预测模型(前文介绍的 p = p(y=1|x,\theta)),所有咱们能够利用 predict_proba 函数预测其概率train_predict_proba = clf.predict_proba(x_train)test_predict_proba = clf.predict_proba(x_test)print('The test predict Probability of each class:\n',test_predict_proba)## 其中第一列代表预测为0类的概率,第二列代表预测为1类的概率,第三列代表预测为2类的概率。## 利用accuracy(准确度)【预测正确的样本数目占总预测样本数目标比例】评估模型成果print('The accuracy of the Logistic Regression is:',metrics.accuracy_score(y_train,train_predict))print('The accuracy of the Logistic Regression is:',metrics.accuracy_score(y_test,test_predict))
The test predict Probability of each class: [[0. 0. 1.] [0. 1. 0.] [0. 1. 0.] [1. 0. 0.] [1. 0. 0.] [0. 0. 1.] [0. 0. 1.] [1. 0. 0.] [0. 1. 0.] [1. 0. 0.] [0. 1. 0.] [0. 1. 0.] [1. 0. 0.] [0. 1. 0.] [0. 1. 0.] [0. 1. 0.] [1. 0. 0.] [0. 1. 0.] [1. 0. 0.] [1. 0. 0.] [0. 0. 1.] [1. 0. 0.] [0. 0. 1.] [1. 0. 0.] [1. 0. 0.] [1. 0. 0.] [0. 1. 0.] [1. 0. 0.] [0. 1. 0.] [1. 0. 0.] [1. 0. 0.] [0. 0. 1.] [0. 0. 1.] [0. 1. 0.] [1. 0. 0.] [0. 1. 0.] [0. 1. 0.] [1. 0. 0.] [1. 0. 0.] [0. 1. 0.] [0. 0. 1.] [1. 0. 0.] [0. 1. 0.] [1. 0. 0.] [1. 0. 0.] [0. 0. 1.] [0. 0. 1.] [1. 0. 0.] [1. 0. 0.] [0. 1. 0.] [1. 0. 0.] [1. 0. 0.] [0. 1. 0.] [0. 1. 0.] [0. 0. 1.] [0. 0. 1.] [0. 1. 0.] [1. 0. 0.] [1. 0. 0.] [1. 0. 0.] [0. 1. 0.] [0. 1. 0.] [0. 0. 1.] [0. 0. 1.] [1. 0. 0.] [0. 1. 0.] [0. 0. 1.] [1. 0. 0.] [1. 0. 0.]]The accuracy of the Logistic Regression is: 0.9963636363636363The accuracy of the Logistic Regression is: 0.9565217391304348
## 查看混同矩阵confusion_matrix_result = metrics.confusion_matrix(test_predict,y_test)print('The confusion matrix result:\n',confusion_matrix_result)# 利用热力求对于后果进行可视化plt.figure(figsize=(8, 6))sns.heatmap(confusion_matrix_result, annot=True, cmap='Blues')plt.xlabel('Predicted labels')plt.ylabel('True labels')plt.show()
The confusion matrix result: [[30  1  0] [ 0 23  0] [ 2  0 13]]

3.3 重要知识点

3.3.1 决策树构建的伪代码

输出: 训练集D={($x_1$,$y_1$),($x_2$,$y_2$),....,($x_m$,$y_m$)};
特色集A={$a_1$,$a_2$,....,$a_d$}

输入: 以node为根节点的一颗决策树

过程:函数TreeGenerate($D$,$A$)

  1. 生成节点node
  2. $if$ $D$中样本全书属于同一类别$C$ $then$:
  3. ----将node标记为$C$类叶节点;$return$
  4. $if$ $A$ = 空集 OR D中样本在$A$上的取值雷同 $then$:
  5. ----将node标记为叶节点,其类别标记为$D$中样本数最多的类;$return$
  6. 从 $A$ 中抉择最优划分属性 $a_*$;
  7. $for$ $a_*$ 的每一个值 $a_*^v$ $do$:
  8. ----为node生成一个分支,令$D_v$示意$D$中在$a_*$上取值为$a_*^v$的样本子集;
  9. ----$if$ $D_v$ 为空 $then$:
  10. --------将分支节点标记为叶节点,其类别标记为$D$中样本最多的类;$then$
  11. ----$else$:
  12. --------以 TreeGenerate($D_v$,$A${$a_*$})为分支节点

决策树的构建过程是一个递归过程。函数存在三种返回状态:(1)以后节点蕴含的样本全副属于同一类别,无需持续划分;(2)以后属性集为空或者所有样本在某个属性上的取值雷同,无奈持续划分;(3)以后节点蕴含的样本汇合为空,无奈划分。

3.3.2 划分抉择

从上述伪代码中咱们发现,决策树的关键在于line6.从$A$中抉择最优划分属性$_∗$,个别咱们心愿决策树每次划分节点中蕴含的样本尽量属于同一类别,也就是节点的“纯度”更高。

3.3.2.1 信息增益

信息熵是一种掂量数据凌乱水平的指标,信息熵越小,则数据的“纯度”越高

$\operatorname{Ent}(D)=-\sum_{k=1}^{|\mathcal{Y}|} p_{k} \log _{2} p_{k}$

其中$p_k$代表了第$k$类样本在$D$中占有的比例。

假如离散属性$a$有$V$个可能的取值{$a^1$,$a^2$,....,$a^V$},若应用$a$对数据集$D$进行划分,则产生$D$个分支节点,记为$D^v$。则应用$a$对数据集进行划分所带来的信息增益被定义为:

$\operatorname{Gain}(D, a)=\operatorname{Ent}(D)-\sum_{v=1}^{V} \frac{\left|D^{v}\right|}{|D|} \operatorname{Ent}\left(D^{v}\right)$

个别的信息增益越大,则意味着应用特色$a$来进行划分的成果越好。

3.3.2.2基尼指数

$\begin{aligned}
\operatorname{Gini}(D) &=\sum_{k=1}^{|\mathcal{Y}|} \sum_{k^{\prime} \neq k} p_{k} p_{k^{\prime}} \
&=1-\sum_{k=1}^{|\mathcal{Y}|} p_{k}^{2}
\end{aligned}$

基尼指数反映了从数据集$D$中随机抽取两个的类别标记不统一的概率。

$\operatorname{Gini}\operatorname{index}(D, a)=\sum_{v=1}^{V} \frac{\left|D^{v}\right|}{|D|} \operatorname{Gini}\left(D^{v}\right)$

应用特色$a$对数据集$D$划分的基尼指数定义为上。

3.3.3 重要参数

Criterion这个参数正是用来决定模型特征选择的计算方法的。sklearn提供了两种抉择:

  • 输出”entropy“,应用信息熵(Entropy)
  • 输出”gini“,应用基尼系数(Gini Impurity)

random_state用来设置分枝中的随机模式的参数,默认None,在高维度时随机性会体现更显著。splitter也是用来管制决策树中的随机选项的,有两种输出值,输出”best",决策树在分枝时尽管随机,然而还是会优先选择更重要的特色进行分枝(重要性能够通过属性feature_importances_查看),输出“random",决策树在分枝时会更加随机,树会因为含有更多的不必要信息而更深更大,并因这些不必要信息而升高对训练集的拟合。

限度树的最大深度,超过设定深度的树枝全副剪掉。这是用得最宽泛的剪枝参数,在高维度低样本量时十分无效。决策树多成长一层,对样本量的需要会增加一倍,所以限度树深度可能无效地限度过拟合。

min_samples_leaf 限定,一个节点在分枝后的每个子节点都必须蕴含至多min_samples_leaf个训练样本,否则分枝就不会产生,或者,分枝会朝着满足每个子节点都蕴含min_samples_leaf个样本的方向去产生。个别搭配max_depth应用,在回归树中有神奇的成果,能够让模型变得更加平滑。这个参数的数量设置得太小会引起过拟合,设置得太大就会阻止模型学习数据。

4.总结

决策树的次要长处:

  1. 具备很好的解释性,模型能够生成能够了解的规定。
  2. 能够发现特色的重要水平。
  3. 模型的计算复杂度较低。

决策树的次要毛病:

  1. 模型容易过拟合,须要采纳减枝技术解决。
  2. 不能很好利用连续型特色。
  3. 预测能力无限,无奈达到其余强监督模型成果。
  4. 方差较高,数据分布的轻微扭转很容易造成树结构齐全不同。

本我的项目链接:https://www.heywhale.com/home/column/64141d6b1c8c8b518ba97dcc

参考链接:https://tianchi.aliyun.com/course/278/3422


自己最近打算整合ML、DRL、NLP等相干畛域的体系化我的项目课程,不便入门同学疾速把握相干常识。申明:局部我的项目为网络经典我的项目不便大家疾速学习,后续会一直削减实战环节(较量、论文、事实利用等)。

  • 对于机器学习这块布局为:根底入门机器学习算法--->简略我的项目实战--->数据建模较量----->相干事实中利用场景问题解决。一条路线帮忙大家学习,疾速实战。
  • 对于深度强化学习这块布局为:根底单智能算法教学(gym环境为主)---->支流多智能算法教学(gym环境为主)---->单智能多智能题实战(论文复现偏业务如:无人机优化调度、电力资源调度等我的项目利用)
  • 自然语言解决相干布局:除了单点算法技术外,次要围绕常识图谱构建进行:信息抽取相干技术(含智能标注)--->常识交融---->常识推理---->图谱利用

上述对于你把握后的期许:

  1. 对于ML,心愿你后续能够乱杀数学建模相干较量(加入就获奖保底,top还是难的须要钻研)
  2. 能够理论解决事实中一些优化调度问题,而非停留在gym环境下的一些游戏demo玩玩。(更深层次可能须要本人钻研了,难度还是很大的)
  3. 把握可常识图谱全流程构建其中各个重要环节算法,蕴含图数据库相干常识。

这三块畛域耦合状况比拟大,后续会通过比方:搜寻举荐零碎整个我的项目进行耦合,各项算法都会耦合在其中。举例:常识图谱就会用到(图算法、NLP、ML相干算法),搜寻举荐零碎(除了该畛域召回粗排精排重排混排等算法外,还有强化学习、常识图谱等耦合在其中)。饼画的有点大,前面缓缓实现。