0%

Python机器学习

越努力越幸运

机器学习简介

机器学习领域:(图像识别,自然语言处理,传统预测)

机器学习库和框架: scikit learn,tensorflow(深度)pytorch(深度)

学习书籍推荐:

课程目标:

1. 熟悉机器学习各类算法的原理
1. 掌握算法的使用,能够结合场景解决实际问题
1. 掌握使用机器学习算法库和框架的技能

机器学习课程概要:(特征工程;模型,策略,优化;分类,回归,聚类;Tensorflow;神经网络;图像识别;自然语言处理)

day01:数据的特征工程

机器学习概述

定义:机器学习是从数据中自动分析获得规律(模型),并利用规律对未知数据进行预测

机器学习的目的是让机器学习程序替换手动的步骤,减少企业的成本也提高企业的效率。

数据集的构成

机器学习的数据:文件csv

mysql数据库是有性能瓶颈的,读取速度;格式不太符合机器学习要求数据的格式

可用的数据集:

数据集的结构组成

结构:特征值+目标值(注:有些数据集可以没有目标值)

数据中对特征的处理

pandas:一个数据读取非常方便以及基本的处理格式工具。

sklearn:对于特征的处理提供了强大的接口。

特征工程:将原始数据转换为更好地代表预测模型的潜在问题的特征的过程,从而提高了对未知数据的预测准确性。

特征工程的意义:

直接会影响预测结构

scikit-learn库的介绍:

Python语言的机器学习工具

Scikit-learn包括许多知名的机器学习算法的实现

Scikit-learn文档完善,容易上手,丰富的API,使其在学术界颇受欢迎,目前文档版本0.19

下载安装Scikit-learn

确保你的计算机已经安装了 Python 3pip

安装scikit-learn需要Numpy,pandas等库

在 Windows 上安装 Python 3

  1. 下载 Python 安装程序

  2. 运行安装程序

    • 双击下载的 .exe 安装程序。
    • 在安装界面,确保勾选 “Add Python to PATH” 选项,这是为了让你在命令行中方便地使用 Python。
    • 选择 Install Now 来进行默认安装,或者选择 Customize installation 来进行自定义安装
  3. 验证安装: 安装完成后,打开命令提示符(按 Win + R,输入 cmd 然后回车),输入以下命令来检查 Python 是否安装成功:

    1
    python --version

    如果安装成功,你应该看到类似于以下的输出:

    1
    Python 3.x.x

​ 1. 使用 pip 安装

打开命令行终端(在 Windows 上使用命令提示符或 PowerShell,在 macOS/Linux 上使用终端),然后输入以下命令:

1
pip install scikit-learn

这将会安装最新版本的 Scikit-learn 及其所需的依赖。

​ 2. 验证安装

安装完成后,打开 Python 解释器(在终端中输入 pythonpython3),然后输入以下代码来验证 Scikit-learn 是否安装成功:

1
2
import sklearn
print(sklearn.__version__)

如果安装成功,你应该看到类似于以下的输出:

1
0.24.1

数据的特征抽取:

特征抽取对文本等数据进行特征值化

字典特征抽取:对字典数据进行特征值化

类:sklearn.feature_extraction.DictVectorizer

DictVectorizer语法:DictVectorzer(sparse=True,……)

DictVectorizer.fit_transform(X) X:字典或者包含字典的迭代器
返回值:返回sparse矩阵
DictVectorizer.inverse_transform(X) X:array数组或者sparse矩阵
返回值:转换之前的数据格式
DictVectorizer.transform(X) 返回类别名称
DictVectorizer.get_feature_names(X) 按照原先的标准转换

流程:

导包:from sklearn.feature_extraction import DictVectorizer

  1. 实例化类DictVectorizer,默认返回sparse矩阵的形式
  2. 调用fit_transform方法输入数据并转换

sparse矩阵:(节约内存,方便读取处理)

one-hot编码分析

当您的数据包含标称型属性时,这些属性没有内在的顺序或大小关系。例如,颜色(红、绿、蓝),国家名(中国、美国、法国),等。对于这样的属性,直接用数值表示是不合适的,因为这会给模型带来误导性的信息,即数值间的比较关系。通过one-hot编码,可以为每个类别创建一个新的二进制特征,这样模型就不会错误地认为某些类别之间存在等级或数量上的关系。

文本特征抽取1:

导包:from sklearn.feature_extraction.text import CountVectorizer

​ 作用:对文本数据进行特征值化

​ 类: sklearn.feature_extraction.text.CountVectorizer

CountVectorizer.fit_transform(X) X:文本或者包含文本字符串的可迭代对象
返回值:返回sparse矩阵
CountVectorizer.inverse_transform(X) X:array数组或者sparse矩阵
返回值:转换之前数据格式
CountVectorizer.get_feature_names() 返回值:单词列表,重复的只看做一次

fit_transform()首先使用 fit() 对输入数据进行学习,建立词汇表;然后使用 transform() 将文本数据转换为数值特征矩阵

流程

  1. 实列化类CountVectorizer
  2. 调用fit_transform方法输入数据并转换(注意返回格式,利用toarray()进行sparse矩阵转换array数组)

    [“life is short,i like python”,”life is too long,i dislike python”]

    对每篇文章,在词的列表里面进行统计每个词出现的次数,单个字母不统计。

文本特征抽取的用途: 文本分类情感分析

单个英文字母不统计:不代表文本的主体,没有分类的依据。

中英文杂糅:默认不支持特征提取,以空格分开(分词工具)

分词工具:jieba分词

下载: pip3 install jieba

使用: import jieba

​ jieba.cut(“我是一个好程序员”)

注意: 返回值:词语生成器

文本特征抽取方式2:

tf_idf重要性程度:

类:sklearn.feature_extraction.text.TfidfVectorizer

Tf:term frequency :词的频率->统计每篇文章在这个词的列表中出现的次数

idf:inversedocument frequency:逆文档频率->log(总文档数量/该词出现的文档数量)

tf*idf,我们称之为重要性程度

语法:

TfidfVectorizer(stop_word=None,.....)

数据的特征预处理:

特征预处理:通过特定的统计方法(数学方法)将数据转换成算法要求的数据。

针对的数值型数据:标准缩放(归一化,标准化,缺失值)

类别型数据:one-hot编码

时间类型:时间的切分

特征预处理API:sklearn.preprofessing

归一化:

特点:通过对原始数据进行变换把数据映射到(默认为[0,1])之间

sklearn归一化API:

sklearn.preprocessing.MinMaxScaler

MinMaxScaler语法:

MinMaxScalar(feature_range=(0,1)......)

​ 每个特征缩放到给定范围(默认[0,1])

MinMaxScalar.fit_transform(X)

​ X:numpy array格式的数据[n_samples,n_features]

​ 返回值:转换后的形状相同的array

归一化步骤:

1. 实列化`MinMaxScaler`
1. 通过fit_transform转换

想要多个特征同等重要,需要进行归一化处理,使得某一个特征对最终结果不会造成更大影响。

归一化总结:

注意在特定场景下最大值最小值是变化的,另外,最大值与最小值非常容易受到异常点的影响,所以,这种方法

鲁棒性(稳定性)较差,只适合传统精确小数据场景。

标准化:

特点:通过对原始数据进行变换把数据变换到均值为0标准差为1的范围内

var=[(90-75)^2+(60-75)^2+(75-75)^2]/3=150

σ=√150

异常的对平均值的影响很小

方差考量了数据的稳定性,方差小表示数据比较集中,方差大表示数据比较分散。

结合归一化来谈标准化:

​ 对于归一化来说:如果出现异常点,影响了最大值和最小值,那么结果显然会发生改变

​ 对于标准化来说:如果出现异常点,由于具有一定数据量,少量的异常点对于平均值的影响并不大,从而方差改变较小。

标准化的API:

scikit-learn.preprocessing.StandardScaler

标准化步骤

  1. 实例化StandardScaler
  2. 通过fit_transform转换

标准化总结:在已有样本足够多的情况下比较稳定,适合限制嘈杂大数据场景。

数值型数据标准缩放的方法:1.归一化;2.标准化;3.缺失值

类别型数据:one-hot编码

时间类型:时间的切分

缺失值处理方法:

删除:如果每列或者行数据缺失值达到一定的比例,建议放弃整行或者整列

插补:可以通过缺失值每行或者每列的平均值,中位值来填充。

缺失值API:sklearn.processing.Imputer

数据当中的缺失值:np.nan(float类型)

数据的降维:

降维中的维度指的是特征的数量

特征选择

特征选择的原因:

​ 冗余:部分特征的相关度高,容易消耗计算性能

​ 噪声:部分特征对预测结果有影响

特征选择是什么:

​ 就是单纯从提取到的所有特征中选择部分特征作为训练集特征,特征在选择前和选择后可以改变值,也不改变值,但是选择后的特征维数肯定比选择前小,毕竟我们只选择了其中的一部分特征。

特征选择的主要方法:

​ Filter(过滤式):Variance Threshold(从方差大小来考虑这个特征所有样本的数据情况)

​ Embedded(嵌入式):正则化,决策树

​ Wrapped(包裹式):

特征选择API: sklearn.feature_selection.VarianceThreshold

VarianceThreshold流程:

  1. 初始化VarianceThreshold,指定阈值方差
  2. 调用fit_transform

主成分分析(PCA)

主成分分析的API:

sklearn.decomposition

n_components:小数形式0~1

​ 整数形式减少到的特征数量

PCA流程:

  1. 初始化PCA,指定减少后的维度
  2. 调用fit_transform

场景:

​ PCA:当特征数量达到上百的时候就要考虑数据的简化问题(简化数据集的同时将损失降到最小)

day02 课程第二天

sklearn数据集与估计器

数据集分为训练集(特征值,目标值)和测试集(特征值,目标值)

train_test_split()

训练数据:用于训练,构建模型

测试数据:在模型检验时使用,用于评估模型是否有效

scikit-learn数据集API介绍:

获取数据集返回的类型:

sklearn数据集划分API:

sklearn.model_selection.train_test_split

数据集进行分割:

用于分类的大数据集:

1
2
3
4
sklearn.datasets.fetch_20newsgroups(data_home=None,subset='train')
# subset:"train"或者"test all",可选,选择要加载的数据集,训练集的训练,测试集的测试,两者的全部
datasets.clear_data_home(data_home)=None
# 清楚目录下的数据

sklearn回归数据集:

特征工程的步骤:

​ 实例化(实例化的就是一个转换器类)

​ 调用fit_transform(对于文档简历分类词频矩阵,不能同时调用)

转换器:

估计器:实现了一类算法得API

​ 流程:fit 训练数据

​ predict预测测试集得结果

​ score得出准确率

机器学习基础

算法是核心,数据和计算是基础。

大部分复杂模型的算法设计都是算法 工程事在做,而我们分析很多的数据,分析具体的业务,应用常见的算法,特征工程,调参数,优化。

数据类型:

离散型数据:由记录不同类别个体的数目得到的数据,又称计数数据,所有这些数据全部都是整数,而且不能再细分,也不能进一步提高他们的精确度。

连续型数据:变量可以在某个范围内取任一数,即变量的取值可以是连续的,如长度,时间,质量值等,这类类非整数,含有小数部分。

注:只要记住一点,离散型是区间内不可分,连续型是区间内可分。

数据的类型将是机器学习模型不太问题不同处理的依据。

机器学习算法分类:

监督学习(预测):(特征值+目标值)

  • 分类(目标值离散型) k-近邻算法 贝叶斯分类 决策树与随机森林 逻辑回归 神经网络
  • 回归(目标值连续型) 线性回归 岭回归
  • 标注 隐马尔可夫模型

无监督学习:(特征值)

  • 聚类 k-means

监督学习:可以由输入数据中学到或建立一个模型,并依次模式推测新的结果。输入数据是由输入特征值和目标值所组成。函数的输出可以是一个连续的值(回归),或是输出是有限个离散值(称作分类)

无监督学习:可以由输入数据中学到或建立一个模型,并依次模式推测新的结果。输入数据是由输入特征值所组成。

机器学习的开发流程:

​ 1.公司本身就有数据

1.数据:2.合作过来的数据

​ 3.购买的数据

2.原始数据:明确问题做什么(相当于建立模型的过程(分类or回归or非监督学习))

3.数据基本处理:pd去处理(缺失值,合并表)

4.特征工程(特征进行处理)

5.找合适的算法去进行预测分析

6.模型的评估,判断效果

7.上线使用(以API形式提供)

模型:算法+数据

分类算法-k近邻算法(归一化处理)

定义:如果一个样本在特征空间中的k个最近相似(即特征空间中最邻近)的样本中的大多数属于某一种类别,则该样本也属于这个类别。

KNN算法最早是由Cover和Hart提出的一种分类算法。

欧氏距离:两个样本的距离可以通过如下公式计算

K-近邻算法需要做标准化处理。

sklerarn k-近邻算法的API:

  • sklearn.neighbors.KNeighborsClassifier(n_neighbors=5,algorithm='auto')

    • n_neighbors: int,可选(默认=5),k_neighbors查询默认使用的邻居数

    • algorithm:{‘auto’,’ball_tree’,’kd_tree’,’brute’},可选用于计算最近邻居的算法,‘ball_tree’将使用BallTree.

      ‘kd_tree’将使用KDTree.’auto’将尝试根据传递给fit方法的值来决定最合适的算法。

https://www.kaggle.com/c/facebook-v-predicting-check-ins/data

分类模型的评估:目标值是离散型

准确率

精确率和召回率:混淆矩阵

分类算法-朴素贝叶斯算法

概率基础:概率定义为一件事情发生的可能性。

联合概率和条件概率:

A1,A2相互独立是指A1和A2不是相互影响的,条件独立的,自然语言处理处理不独立的情况。

使用朴素贝叶斯算法的前提是特征条件是独立的。

朴素贝叶斯算法实列

0/121合理吗?

朴素贝叶斯实现API

sklearn.naive_bayes.MultinomialNB

MultinomiaNB

sklearn.naive_bayes.MultinomialNB(alpha=1.0)

​ 朴素贝叶斯分类

​ alpha:拉普拉斯平滑系数

分类评估:

混淆矩阵:在分类任务下,预测结果与正确标记之间存在四种不同的组合,构成混淆矩阵(适用于多分类)

F1-score反应了模型的稳健性

True Positive(TP)、True Negative(TN)、False Positive(FP)、False Negative(FN)

预测值=1 预测值=0
真实值=1 3(TP) 1(FP)
真实值=0 1(TN) 7(FN)
  • TP = 3(实际患病并被正确预测出来的数量)
  • FP = 1(实际健康但被错误预测为患病的数量)
  • TN = 1(实际患病但被错误预测为健康的数量)
  • FN = 7(实际健康并被正确预测出来的数量)

F1得分得分是精确率(Precision)和召回率(Recall)的调和平均数,常用于评估二分类模型的性能。在数学上,F1得分的计算公式如下:

首先,定义精确率和召回率:

精确率 (Precision) = TP / (TP + FP)

召回率 (Recall) = TP / (TP + FN)

F1得分 (F1 Score) = 2 * (精确率 * 召回率) / (精确率 + 召回率)

分类模型评估API:

sklearn.metrics.classification_report

sklearn.metrics.classification_report(y_true,y_pred,target_names=None)

  • y_true:真实目标值
  • y_pred:估计器预测目标值
  • target_names:目标类别名称
  • return:每个类别精确率和召回率

模型的选择与调优

day03 课程第三天

交叉验证(cross validation)

为了让被评估的模型更加准确可信,在训练集中选一部分样本用于测试模型。保留一部分的训练集数据作为验证集/评估集,对训练集生成的参数进行测试,相对客观的判断这些参数对训练集之外的数据的符合程度。

K折交叉验证(k-fold cross validation)

​ 把四个准确率求平均值得到一个模型结果

网格搜索(Grid Search):

Grid Search:一种调参手段/调优方法,在参数列表中进行穷举搜索,对每种情况进行训练,找到最优的参数。

穷举搜索:在所有候选的参数选择中,通过循环遍历,尝试每一种可能性,表现最好的参数就是最终的结果。其原理就像是在数组里找最大值。(为什么叫网格搜索?以有两个参数的模型为例,参数a有3种可能,参数b有4种可能,把所有可能性列出来,可以表示成一个3*4的表格,其中每个cell就是一个网格,循环过程就像是在每个网格里遍历、搜索,所以叫grid search)

超参数搜索-网格搜索API

sklearn.model_selection.GridSearchCV

分类算法-决策树

认识决策树

划分的依据-信息熵

信息熵公式:信息熵越大不确定性也会随之增大

  • p(x) 是 X=x 的概率,即 X取特定值 x 的概率。

决策树的划分依据——信息增益:当得知一个特征条件之后,减少的信息熵的大小

特征A对训练数据集D的信息增益g(D,A),H(D)为初始信息熵的大小

  • 注:信息增益表示得知特征X的信息而使得类Y得信息不确定性减少的程度

条件熵H(D|A)的计算:衡量的是在已知某些变量的情况下,另一些变量的不确定性

银行贷款分析

ID3-信息增益最大原则

C4.5-信息增益比最大原则

CART

  • 回归树:平方误差最小
  • 分类树:基尼系数最小的原则在sklearn中可以选择划分的默认原则

sklearn决策树API:

class sklearn.tree.DecisionTreeClassifier(criterion='gini',max_deepth=None,random_state=None)

  • 决策树分类器
  • criterion:默认是“gini”系数,也可以选择信息增益的熵”entropy“
  • max_depth:树的深度大小
  • random_state:随机数种子
  • method:
  • decision_path:返回决策树的路径

泰坦尼克号乘客生存分类

http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt

决策树的优缺点:

优点:

简单的理解和解释,树木可视化

需要很少的数据准备,其他技术通常需要数据归一化

缺点:

决策树学习中可以创建不能很好地推广数据的归于复杂的树—过拟合

改进:

减枝cart算法(决策树API当中已经实现,随机森林参数调优有相关介绍)

随机森林

分类算法-随机森林(集成学习方法)

集成学习通过建立几个模型组合的来解决单一预测问题。它的工作原理是生成多个分类器/模型,各自独立地学习和做出预测。这些预测最后结合成单预测,因此优于任何一个单分类的做出预测。

随机森林的定义:在机器学习中,随机森林是一个包括多个决策树的分类器,并且其输出的类别是由个别树输出的众数而定的

众数是统计学中的一个概念,指的是在一组数据中,出现次数最多的数值。换句话说,众数是数据集中出现频率最高的值。

随机森林建立多个决策树的过程:

单个树建立过程(N个样本M个特征):

  1. 随机在N各样本当中选择一个样本,重复N次,样本可能重复
  2. 随机在M个特征当中选出m个特征(m<M)

​ 建立10颗决策树,样本,特征大多不一样,采用bootstrap抽样

随机森林API:

优点:准确率高,不会过拟合,适用于大数据集

分类算法的评估:

​ 准确率

​ 精确率和召回率

回归算法-线性回归分析

1.分类/回归的问题判断

分类:(离散型)分类的目标是将输入数据分配到预先定义好的类别中。其中模型根据已有的训练数据学习如何将新的未见过的数据点映射到这些类别之一。

回归:回归的目标是预测一个连续值的输出,即给定一组特征,预测与之相关的数值结果。但与分类不同的是,回归预测的是数值而不是类别。

如果你的问题是关于“属于哪一类”,那么你可能需要做分类;如果问题是关于“是多少”或者“有多少”,那么你可能需要做回归。例如,预测客户是否会购买产品是一个分类问题(买/不买),而预测客户会购买多少金额的产品则是一个回归问题。

2.线性关系模型

一个通过属性的线性组合来进行预测的函数:

w为权重,b称为偏置项

3.线性回归

定义:线性回归通过一个或者多个自变量(特征/影响因素)与因变量(目标值)之间进行建模的回归分析。其中可以为一个或多个自变量之间的线性组合(线性回归的一种)

一元线性回归:涉及到的自变量只有一个

多元线性回归:涉及到的自变量两个或两个以上

线性回归就是找到属性和权重的组合来预测结果。

矩阵:是大多数算法的计算基础,为了满足特定的运算需求应运而生

通用公式:

其中w,x为矩阵:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import numpy  as np
a=[[1,2,3,4],[5,6,7,8],[2,3,7,9]] #3行4列
b=[2,2,2,2] #1行4列
np.multiply(a,b) #将两个数组 a 和 b 中相应位置的元素相乘
Out[6]:
array([[2,4,6,8],
[10,12,14,16],
[4,6,14,18]])
b=[[2],[2],[2],[2]] #4行1列
np.dot(a,b)
Out[8]:
array([[20],
[52],
[42]])

4.损失函数(误差大小):预测结果与真实结果存在偏差

​ 迭代算法(回归属于迭代算法)是指通过重复一系列步骤或操作来逐步解决问题的方法(逐步优化)。在每次迭代中,算法会基于前一次的结果更新其状态或参数,直到满足某个终止条件为止。迭代算法广泛应用于计算机科学、数学和机器学习等领域。

回归:知道有误差,也会去不断减少误差

损失函数:

总损失函数定义:

又称为最小二乘法(误差平方和)

5.误差优化-寻找最优化的w:目的是找到最小损失对应的W值

方法1——正规方程(普通最小二乘法)

X为特征值矩阵,y为目标值矩阵

其缺点是当特征过于复杂,求解速度太慢。

方法2——梯度下降:通过迭代更新参数来逐步减少损失函数(如均方误差),直到收敛到局部最小值。

我们以单变量中的w0,w1为例子

理解:沿着这个函数下降(损失减少)的方向找,最后就能找到山谷的最低点,然后更新w值

使用:面对训练数据规模十分庞大的任务

初始的直线是如何建立的?随机给的w值然后逐步优化

线性回归实例(需要做标准化处理【K近邻+线性回归】)

正规方程API

1
sklearn.linear_model.LinearRegression
  • 普通最小二乘线性回归
  • coef_:回归系数

梯度下降API

1
sklearn.linear_model.SGDRegressor
  • 通过使用SGD最小化线性模型
  • coef_:回归系数

手动指定学习率:内部会自动指定

scikit-learn优点:封装好,建立模型简单,预测简单

​ 缺点:算法的过程,有些参数都在算法API内部优化

例子:波士顿房价数据

y_predict=lr.predict(x_test)

回顾性能评估

均方误差评估机制:

sklearn回归评估API

1
sklearn.metrics.mean_squared_error
  • mean_squared_error(y_true , y_pred)
    • 均方误差回归损失
    • y_true:真实值
    • y_pred:预测值
    • return:浮点数结果
  • 注:真实值,预测值为标准化之前的值
1
print(mean_squared_error(y_true.inverse_transform(y_test) , y_pred))

6.过拟合和欠拟合

欠拟合:当一个模型过于简单,以至于无法捕捉到训练数据中的基本模式或趋势时,就会发生欠拟合。这意味着模型既不能很好地拟合训练数据,也无法在新数据上做出准确的预测。【学的少】

  • 解决办法:增加数据的特征数量

过拟合:当一个模型过于复杂,以至于它不仅学到了训练数据中的有用信息,还记住了噪声和其他随机波动,这就会导致过拟合。结果是,虽然模型在训练数据上的表现非常好,但在未见过的数据上的泛化性能却很差。【学的多但学错了】

  • 解决办法:
    • 进行特征选择,消除关联性大的特征(很难做)
    • 交叉验证(让所有数据都有过训练(测试集训练集))
    • 正则化(了解):减少某些特征的权重调整到趋近于0

正规方程不能很好解决过拟合问题

线性回归:数据的特征值和目标值之间的关系不仅仅是线性关系是模型复杂的原因

L2正则化:

作用:可以使得W的每个元素都很小,都接近于0

优点:越小的参数说明模型越简单(减少高次项),越简单的模型则越不容易产生过拟合现象

回归:解决过拟合的方式

线性回归:LinearRegression容易出现过拟合,为了把训练集数据表现更好

L2正则化:Ridge岭回归 带有正则化的线性回归 解决过拟合

带有正则化的线性回归-岭回归

1
slearn.linear_model.Ridge
  • slearn.linear_model.Ridge(alpha=1.0)
    • 具有L2正则化的线性最小二乘法
    • alpha:正则化力度 λ(0~1,1~10,通过网格搜索找到最优得力度)
    • coef_:回归系数

​ 力度越来越大,权重趋近于0

岭回归:回归得到得回归系数更符合实际,更可靠。另外,能让估计参数得波动范围变小,变得更稳定。在存在病态数据偏多得研究中有较大得实际价值。

sklearn模型的保存与加载:

可以在不同的时间点或不同的环境中重复利用训练好的模型.

joblib 是一个专门为 NumPy 数组设计的持久化库,它比标准的 pickle 更高效,尤其是在处理大型数据集时

1
from sklearn.externals import joblib

保存:

1
joblib.dump(rf,'test.pkl')

加载:

1
estimator=joblib.load('test.pkl')

分类算法-逻辑回归

  1. 定义介绍

逻辑回归:线性回归的式子作为输入,逻辑回归是解决二分类问题的利器。

应用:广告点击率,是否为垃圾邮件,是否患病,金融诈骗,虚假账号

  1. sigmoid函数

  2. 逻辑回归-损失函数的定义与优化过程

    与线性回归的原理相同,但由于是分类问题,损失函数不一样,只能通过梯度下降求解

    cost损失的值越小,那么预测的类别准确度越高

    | 算法 | 策略(损失函数) | 优化 |
    | ———— | ——————————- | ————————- |
    | 逻辑回归 | 对数似然损失 | 梯度下降 |
    | 线性回归 | 误差平方和/最小二乘法 | 正规方程&梯度下降 |

    损失函数:

    均方误差:不存在多个局部最低点,只有一个最小值

    对数似然损失:多个局部最小值,尽管没有全局最低点,但是效果都是不错的

    ​ 1.多次随机初始化,多次比较最小值结果

    ​ 2.求解过程中,调整学习率

  3. 逻辑回归API

    1
    sklearn.linear_model.LogisticRegression
  • sklearn.linear_model.LogisticRegression(penalty=’l2’,C=1.0)
    • Logistic回归分类器
    • coef_:回归系数

良/恶性乳腺癌肿瘤数据

1
https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data

数据描述:

(1)699条样本,共11列数据,第一列用语检索的id,后9列分别是与肿瘤相关的医学特征,最后一列表示肿瘤类型的数值。

(2)包含16个缺失值,用“?”标出。

逻辑回归 朴素贝叶斯
解决问题 二分类 多分类问题
应用场景 癌症,二分类需要概率 文本分类
参数 正则化力度 没有
结果 判别模型 生成模型(先验)

聚类算法-kmeans原理

1.背景介绍

监督学习依赖于带有正确答案的数据集来训练模型,

非监督学习旨在从未标记的数据中发现隐藏的结构或模式。

聚类:一种常见的非监督学习任务是聚类,即根据某些相似性度量将数据点分组到不同的簇中。只知道特征,根据一些指标进行聚类。

2.聚类的过程

K:把数据划分成多少个类别(k=3)

1.随机在数据当中抽取三个样本,当作三个类别的中心点

2.计算其余的点分别到这三个中心点的距离,每一个样本有三个距离(a,b,c),从中选出距离最近的一个点作为自己的标记。形成三个族群

3.分别计算这三个族群的平均值,把三个平均值与之前的三个旧中心点进行比较

  • 如果相同:结束聚类
  • 如果不相同:把这三个平均值当新的中心点,重复第二步

3.k-means API

1
sklearn.cluster.KMeans
  • sklearn.cluster.KMeans(n_clusters=8,init=’k-means++’)
    • k-means聚类
    • n_clusters:开始的聚类中心数量
    • init:初始化方法,默认为‘k-means ++’
    • labels_:默认标记的类型,可以和真实值比较(不是值比较)

聚类做在分类之前.

4.聚类评估标准-轮廓系数

对于每一个样本都有一个轮廓系数[-1,1]

1.计算蓝1到自身类别的点距离的平均值a_i

2.计算栏1分别到红色类别,绿色类别所有的点的距离,求出平均值b1,b2,取其中最小值当中b_i

1
2
3
4
极端情况:
b_i>>a_i 1 完美
a_i>>b_i -1 最差
得出轮廓系数的范围:[-1,1]

性能评估指标API:

1
sklearn.metrics.silhouette_score
  • sklearn.metrics.silhouette_score(X,labels)
    • 计算所有样本的平均轮廓系数
    • X:特征值
    • labels:被聚类标记的目标值

5.kmeans特点分析

特点分析:采用迭代式算法,直观易懂并且非常实用

缺点:容易收敛到局部最优解(多次聚类)

注意:聚类一般做在分类之前

EM算法:

EM(Expectation-Maximization)算法是一种迭代方法,用于在概率模型中有隐藏变量的情况下进行最大似然估计

1.最大似然

极大似然估计就是用来估计模型参数的统计学方法

在已知(1)样本服从分布的模型,(2)观测到的样本,求解模型的参数

最大似然数学问题:100名学生的身高问题

  • 样本集X={x_1,x_2,…,X_N}N=100
  • 概率密度:p(xi|θ)抽到男生i(的身高)的概率
  • θ是服从分布的参数
  • 独立同分布:同时抽到这100个男生的概率就是他们各自概率的乘积
2.EM算法推导
3.GMM(高斯混合模型)

支持向量机

神经网络

day04 课程第四天

1.深度学习介绍

深度学习代表性的场景应用:图像理解,语言识别,自然语言处理,机器自主。

深度学习:如深度神经网络,卷积神经网络和递归神经网络已被应用计算机视觉,语音识别,自然语言处理,音频识别与生物信息学等领域并获取了极好的效果。

机器学习 深度学习
算法 分类:神经网络(简单的) 神经网络(深度),卷积神经网络(图像),循环神经网络(自然语言处理)
领域 传统预测问题 图像等领域

深度学习的框架:TensorFlow,Torch

2.认识Tensorflow

TensorBoard:可视化

Tensorflow的特点:

1、真正的可移植性
引入各种计算设备的支持包括CPU/GPU/TPU,以及能够很好地运行在移动端,如安卓设备、ios、树莓派等等

2、多语言支持
TensorFlow有一个合理的C++使用界面,也有一个易用的Python使用界面来构建和执行你的graphs,你可以直接写Python/C++程序。

3、高度的灵活性与效率
TensorFlow是一个采用数据流图(data flow graphs),用于数值计算的开源软件库,能够灵活进行组装图,执行图。随着开发的进展,TensorFlow的效率不断在提高。

4、支持
TensorFlow由谷歌提供支持,谷歌投入了大量精力开发TensorFlow,它希望TensorFlow成为机器学习研究人员和开发人员的通用语言。

国内使用Tensorflow的公司:小米,京东等

Tensorflow的版本

0.12版本之后支持的可视化,能够可视化的看见程序图的结构。

gpu版本

cpu版本

3.Tensorflow的安装

当数据量大,特征多或者算法本身设计的比较复杂,运算

cpu:运行操作系统,处理业务,计算能力不突出

gpu:专门为计算设计的,速度会快很多

GPU版本环境搭建

Linux/Ubuntu

用于在不同的操作系统和Python版本下安装TensorFlow 1.0.1版本

  • Python 2.7:

    1
    pip install https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.0.1-cp27-none-linux_x86_64.whl
  • Python 3.5:

    1
    pip3 install https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.0.1-cp35-cp35m-linux_x86_64.whl

macOS

  • Python 2.7:

    1
    pip install https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-1.0.1-py2-none-any.whl
  • Python 3:

    1
    pip3 install https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-1.0.1-py3-none-any.whl

4.Tensorflow基础

5.Tensorflow进阶

6.案例-实现线性回归