深度学习培训班当天小结1

宁波深度学习培训当日小结1

来了宁波参加一个深度学习的培训班,虽然大部分的内容其实是之前自学的时候都有了了解,但还是借此机会做个总结。

  • 传统机器学习
  • 深度学习简介
  • 环境设置

传统机器学习

在这个简单的机器学习介绍中, 我们从线性回归讲起,快速浏览机器学习中涉及的回归、分类、训练数据、测试数据、cost function、算法、模型、特征工程、优化方法、交叉验证、评价指标等等概念。

线性回归:(监督学习的例子)

数据:进货量预测场景, x:上周访客数, y:本周进货量
目标:预测本周进货量
x:特征-feature
y: 目标-target
过程:选择合适的特征, 对y的预测进行建模,验证模型的准确性
1. 模型
2. 算法

从sklearn导入数据分割器(train, test的概念)

from sklearn.cross_validation import train_test_split

import numpy as np

X = boston.data
y = boston.target


X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=2017, test_size=0.25)

# 构建回归目标值的差异
print("最大目标变量是:", np.max(boston.target))
print("最小目标变量是:", np.min(boston.target))
print("平均值是:", np.mean(boston.target))

logistic回归:(监督学习的例子)

logistics回顾:

数据:肿瘤预测场景, x:肿瘤的特征(大小,颜色,厚度等), y:良性/恶性
目标:良性/恶性

过程:选择合适的特征,对y的预测进行建模,验证模型的准确性
1. 模型
2. 算法

# 导入pandas与numpy工具包。
import pandas as pd
import numpy as np

# 创建特征列表。
column_names = ['Sample code number', 'Clump Thickness', 'Uniformity of Cell Size', 'Uniformity of Cell Shape', 'Marginal Adhesion', 'Single Epithelial Cell Size', 'Bare Nuclei', 'Bland Chromatin', 'Normal Nucleoli', 'Mitoses', 'Class']

# 使用pandas.read_csv函数读取指定数据。
data = pd.read_csv('./raw_data/breast-cancer-wisconsin.data', names = column_names )

# 将?替换为标准缺失值表示。
data = data.replace(to_replace='?', value=np.nan)
# 丢弃带有缺失值的数据(只要有一个维度有缺失)。
data = data.dropna(how='any')

# 输出data的数据量和维度。
data.shape

# 使用sklearn.cross_valiation里的train_test_split模块用于分割数据。
from sklearn.cross_validation import train_test_split

# 随机采样25%的数据用于测试,剩下的75%用于构建训练集合。
X_train, X_test, y_train, y_test = train_test_split(data[column_names[1:10]], data[column_names[10]], test_size=0.25, random_state=33)

# 查验训练样本的数量和类别分布。
y_train.value_counts()

# 查验测试样本的数量和类别分布。
y_test.value_counts()

# 从sklearn.preprocessing里导入StandardScaler。
from sklearn.preprocessing import StandardScaler
# 从sklearn.linear_model里导入LogisticRegression与SGDClassifier。
from sklearn.linear_model import LogisticRegression
from sklearn.linear_model import SGDClassifier

# 标准化数据,保证每个维度的特征数据方差为1,均值为0
# 使得预测结果不会被某些维度过大的特征值而主导,影响速度和准确性
ss = StandardScaler()
X_train = ss.fit_transform(X_train)
X_test = ss.transform(X_test)

# 初始化LogisticRegression与SGDClassifier。
lr = LogisticRegression()
sgdc = SGDClassifier()

# 调用LogisticRegression中的fit函数/模块用来训练模型参数。
lr.fit(X_train, y_train)
# 使用训练好的模型lr对X_test进行预测,结果储存在变量lr_y_predict中。
lr_y_predict = lr.predict(X_test)

# 调用SGDClassifier中的fit函数/模块用来训练模型参数。
sgdc.fit(X_train, y_train)
# 使用训练好的模型sgdc对X_test进行预测,结果储存在变量sgdc_y_predict中。
sgdc_y_predict = sgdc.predict(X_test)

# 从sklearn.metrics里导入classification_report模块。
from sklearn.metrics import classification_report

# 使用logistic回归模型自带的评分函数score获得模型在测试集上的准确性结果。
print('Accuracy of LR Classifier:', lr.score(X_test, y_test))
# 利用classification_report模块获得LogisticRegression其他三个指标的结果。
print(classification_report(y_test, lr_y_predict, target_names=['Benign', 'Malignant']))

二分类任务

数据挖掘的分类问题:
二分类问题
多分类问题
多分类问题 —-> 二分类问题
二分类问题解决的大量算法, 相对简单,基本

多分类评价指标:
Logarithmic Loss metric(multi-class logarithmic loss)
logloss
https://www.kaggle.com/wiki/LogLoss
M:类别数
y_ij:当第i个样本为第j类时,y_ij = 1
p_ij:模型预测第i个样本为第j类的概率
二分类情况M=2: logloss2
y_i:第i个样本类别
p_i:模型预测的第i个样本为第1类的概率
Mean Consequential Error (MCE)(0-1损失)
mce
https://www.kaggle.com/wiki/MeanConsequentialError
更多分类指标:
0-1太武断,各个分类代价不同
ROC/AUC
PR曲线
MAP@n
F1 score
Model evaluation
http://scikit-learn.org/stable/modules/model_evaluation.html#classification-metrics
classmetric
regmetric
损失函数(loss function) vs. 评价指标(scoring)

机器学习建模流程

机器学习任务流程

问题定义
获取数据
数据预处理(清洗,处理)(a)
数据的分析,探索性分析,找出数据的pattern(b)
建模、预测、解决问题
可视化、形成报告、结论展示
形成最后的结果,比如产品或者预测的最终提交
注意点:以上步骤不是必须的,不是顺序
可以将几个步骤合并:比如将可视化和数据分析的步骤合并
可以将步骤的顺序调整:比如可以先进行分析,再对数据进行处理
同一步骤可重复多次:比如可视化的部分,建模的部分需要重复很多遍
可以丢掉一些步骤:比如问题的定义如果很清晰,比如最后的结果不是一个产品,这些步骤就都可以丢掉

我们分析过程中,需要带着类似问题前进:

  1. 我们的任务:比如分类
  2. 找出变量间的关联信息:

    2.1 单变量:变量对于y是不是有影响?某个变量的改变是不是会对y的结果有较大的影响?
    2.2 多变量:变量之间有不有关系?怎么样的关系?能不能基于原始变量产生新的变量?

  3. 缺失值的处理

  4. 异常值处理:数据中是不是有异常值?是去掉吗?还是进行处理

  5. 特征选择:有的特征如果对结论没有贡献,我们是不是可以丢弃它?

  6. 特征抽取(创建特征):是不是可以通过各种方法产生有用的新特征?

    6.1. 特征转换:比如文本、图像数据;比如对应于特定的模型、算法,是不是需要特定的数据类型

深度学习是什么

深度学习是近年来兴起的机器学习范式,… …深度学习利用多层神经网络结构,从大数据中学习 现实世界中各类事物能被用于计算机计算的表示形式(比如图像中的事物、音频中的声音等),被认为是智能机器可能的“大脑结构” ——《大数据智能》

既然是机器学习的分支,那么他和传统机器学习的区别在哪里呢?有何特点?
深度学习也曾被叫做features learning,或者表示学习
有能力通过算法,在少量人为经验的情况下,自动从数据中抽取出合适的特征,完成原本需要通过特征工程才能得到的效果(相当于自带“特征抽取器”)
(思考:传统的机器学习的实践难点,1. 特征工程;2.模型调参)
能够处理更多的数据,更大的维度
能够处理更加复杂的数据,更加复杂的任务(图像,文本,语音等)
由于以上特点,它可以用于端到端的服务
它的通用性很强, 一个深度网络模型,一旦训练出来,可能可以适合很多的场景。

那么在操作深度学习的时候,又有何特点呢?
深度学习炼丹术:https://zhuanlan.zhihu.com/p/23781756
深度学习·炼丹入门(真·炼丹)
灵材(数据)
丹方(CNN,RNN等)
真火(GPU)
丹炉(深度学习框架)
炼制(训练)

  1. 深度学习工具介绍(介绍框架)
    如果从炼丹的角度出发,我们看看分别需要啥?
    数据-自己找,特定任务后面会介绍现成的
    模型,算法-等下会学
    真火-花钱买,或者云平台
    丹炉-选一款
    炼制-慢慢练

你可能感兴趣的:(深度学习)