Python 机器学习-学习笔记
1.人工智能概述1.1 机器学习与人工智能、深度学习机器学习是人工智能的一个实现途径深度学习试机器学习的一个方法发展而来1.2 机器学习、深度学习能做些什么?机器学习的应用场景非常多,可以说试渗透到了各个行业领域当中。三个大的领域:传统预测,图像识别,自然语言处理用在挖掘,预测领域:店铺销量预测,量化投资,广告推荐等用在图像领域:无人驾驶,接到交通用在自然...
目录
1 初步认识人工智能
1.1 人工智能概述
1.1.1 机器学习与人工智能、深度学习
机器学习是人工智能的一个实现途径
深度学习试机器学习的一个方法发展而来
1.1.2 机器学习、深度学习能做些什么?
机器学习的应用场景非常多,可以说试渗透到了各个行业领域当中。
三个大的领域:传统预测,图像识别,自然语言处理
- 用在挖掘,预测领域:店铺销量预测,量化投资,广告推荐等
- 用在图像领域:无人驾驶,接到交通
- 用在自然语言处理领域:文本分类,情感分析,自动聊天,文本检测,自动翻译
1.2 什么是机器学习
数据,模型,预测
数据集的构成:特征值+标值
对于每一行数据我们可以称之为样本。
有些数据集可以没有目标值
1.3 机器学习算法分类
监督学习:
目标值:类别-分类问题
目标值:连续性数据-回归问题
无监督学习:
目标值:无-无监督学习
1.4 机器学习开发流程
- 获取数据
- 处理数据
- 特征工程
- 机器学习算法训练-模型
- 模型评估
- 应用
1.5 学习框架和资料介绍
- 算法是核心,数据与计算是基础
- 机器学习-“西瓜书“-周志华
- 统计学方法-李航
- 深度学习-”花书”
2 数据集与特征工程
2.1 数据集
2.1.1 可用数据集
- Sklearn
- Kaggle
- UCI
Scikit-learn包含内容:分类,积累,回归
2.2 特征工程
特征工程试使用专业背景知识和技巧处理数据,使得特征能在机器学习算法上发挥更好的作用的过程
特征工程一般包括模型选择和调优。
2.2.1 特征抽取
Tf-idf文本特征提取:
TF-IDF的主要思想是:如果某个词语在一篇文章中出现的概率高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合永安里用来分类。
TF-IDF作用:用以评估一字词对于一个文件或者一个语料库中的其中一份文件的重要成都
词频(term frequency, if)指的是某一个给定的词语在该文件中出现的频率,文档频率(inverse document frequenct, idf)是一个词语普遍重要的度量。某一特定词语的idf,可以由总文件数目初一包含该词语之文件的数目,再将得到的商除取以10为底的对数得到。
公式: tfidf(ij)=tf(ij)*idf(i)
案例:
1000篇文章-语料库
100篇文章-“非常”
10篇文章-“经济”
两篇文章
文章A(100词) :10次“经济”TF-IDF:0.2
tf:10/100 = 0.1
idf:log10 1000/10=2
文章B(100词):10次“非常”TF-IDF:0.1
tf:10/100 = 0.1
idf:lg 1000/100=1
2.2.2 特征预处理.
什么是数据预处理:
通过一些转换函数将特征数据转换成更加适合算法模型的特征数据过程
1) 包含内容
数值型数据的无量纲化:
归一化
标准化
2) 特征与处理API
sklearn.preprocessing
归一化:
1) 定义:通过对原始数据进行变换,把数据映射到(默认为[0,1])之间
2) 公式:x'=(x-min)/(max-min) x"=x'*(mx-mi)+mi
对于每一列,max为最大值,min为最小值,那么x"为最终结果
mx,mi分别为指定区间值,默认mx为1,mi为0
标准化:
1) 定义:通过对原数据进行变换吧数据变换到均值为0,标准差为1范围内
2) 公式:x'=(x-mean)/std
作用于每一列,mean为平均值,std为标准差
2.2.3 特征降维
降维:
降维指的是再某些限定条件下,降低随机变量(特征)个数,得到一组“不相关”主变量的过程(降低随机变量的个数)
相关特征比如: 相对湿度与降雨量之间的相关
降维的两种方式:
1) 特征选择
2) 主成分分析
特征选择:
Fileter过滤式:
方差选择法:低方差特征过滤
相关系数:特征之间的相关程度
|r|<0.4 低度相关 0.4<|r|<0.7 显著性相关 0.7<|r| 高度线性相关
皮尔逊相关系数 0.9942
特征与特征之间相关性很高:
1) 选取其中一个
2) 加权求和
3) 主成分分析
Embeded嵌入式:
决策树
正则化
深度学习
3 sklenarn转换器和估计器
3.1 转换器
实例化Transformer
调用fit-transform
3.2 估计器
实例化estimator
estimator.fit(x_train,y_train) 计算-调用完毕,模型生成
模型评论:
直接比对真实值和预测值
y_predict=estimator.predict(x_test)
y_test==y_predict
计算住准确率
estimator.score(x_test,y_test)
- 用于分类的估计器
- 用于回归的估计器
- 无监督学习的估计器
4 机器学习算法
4.1 K-近邻算法
4.1.1 K-近邻算法介绍
核心思想:根据你的邻居推断你的类别
k取值过小:容易受到异常点的影响
k值取值过大:容易受到样本不均衡的影响
距离公式:欧氏距离 曼哈顿距离(绝对值距离) 明可夫斯基距离
4.1.2 K-临近算法API
sklearn.neighbors.KNeighborsClassifier(n_neighbors=5,algorithm'auto')
4.1.3 总结
优点:简单 易于理解 易于实现 无需训练
缺点:懒惰算法 对测试样本分类是的计算量大,内存开销大
必须指定K值,K值选择不当,则分类精度难以保证
使用场景:小数据场景,几千~几万样本,集体场景具体业务去测试
4.2 模型选择与调优
4.2.1 交叉验证
将拿到的训练数据,分为训练集与验证集,取平均值作为最终结果、
4.2.2 超参数搜索-网格搜索(Grid Search)
sklearn.model_selection.GridSearchCV(estimator,para_grid=None)
对估计器的指定参数进行详尽搜索
estimator:估计器对象
param_grid:估计其参数(dict){"n_neighbors":[1,3,5]}
cv:指定几折交叉验证
fit():输入训练数据
score():准确率
结果分析:
最佳参数:best_params_
最佳结果:best_score_
最佳估算器:best_estimator_
交叉验证结果:cv_results_
4.3 朴素贝叶斯算法
4.3.1 朴素:
特征与特征之间相互独立
4.3.2 公式:
P(C|F1,F2,F3,...)=(P(F1,F2,...|C)P(C))/(P(F1,F2,...))
其中C可以是不同类别
P(C):每个文档类别的概率(某文档类别数/总文档数量)
P(W|C):给定类别下特征(被预测文档中主线的词)的概率
计算方法:P(F1|C)=Ni/N(训练文档中去计算)
Ni为该F1词在C类别所有文档中出现的次数
N为所属类别C下的文档所有词出现的次数和
P(F1,F2,...)预测文档中每个此的概率
4.3.3 拉普拉斯平滑系数
计算出的分类概率为0
P(F1|C)=(Ni+a)/(N+am)
a一般指定为1,m为训练文档中统计出的特征词个数
4.4 决策树
4.4.1 认识决策树
决策树的思想来源非常朴素,程序设计中的条件分支结构就是if-else结构,最早的决策树就是利用这类结构分割数据的一种费雷学习方法
如何高效地进行决策-特征的先后顺序
4.4.2决策树分类原理详解
信息熵,信息增益
信息熵的定义:
H的专业术语称之为信息熵,单位为比特
H(X)=-∑(i=1,n)(P(xi)logbP(xi))
H(总)=-((6/15)log(6/15)+(9/15)log(9/15))=0.971
4.4.3 决策树的划分依据之一-----信息增益
定义:
特征A对于训练数据集D的信息增益g(D,A),定义为集合D的信息熵H(D)与特征A给定条件下的D的信息条件熵H(D|A)之差。
公式:
g(D,A)=H(D)-H(D|A)
公式的详细解释:
H(D|A)=∑(i=1,n)((|Di|/|D|)H(Di))
4.4.4 决策树可视化
保存树结构到dot文件
4.4.5 总结决策树优缺点
优点: 简单的理解和解释,树木可视化
缺点: 容易产生过拟合
改进: 剪枝,随机森林
4.5 随机森林
4.5.1 集成学习方法
集成学习方法就是通过建立几个模型组合的来解决单一预测问题。他的工作原理是生成多个分类器/模型,各自独立地学习和做出预测。这些预测最后结合成组合预测,因此由于任何一个但分类的做出预测。
4.5.2 什么是随机森林
在机器学习中,随机森林是一个包含多个决策树的分类器,并且其输出的类别是由个别树输出的类别的中暑决定的。
4.5.3 随机森林原理过程
学习算法根据下列算法而建造每棵树:
用N来表示训练用例的个数,M表示特征数目。
1. 一次随机选出一个样本,重复N次,(可能出现重复样本)
2. 随机去选出M个特征,m<<M,建立决策树
采取bootstrap抽样(随机又放回抽取)
4.5.4 API
sklearn.ensemble.RandomForestClassifier(n_estimators=10,criterion="gini",max_depth=None,bootstrap=True,random_state=None,min_samples_split=2)
随机森林分类器
n_estimators:integer,optional(defult=10)森林里的树木数量120 200 300 500 800 1200
criterion:string. 可选(默认=“gini”)分割特征的测量方法
max_depth.可选(默认=无)树的最大深度5,8,15,25,30
max_features="auto" 每个决策树的最大特征数量
bootstrap:boolean,optional(defult=True)是否在构建树时使用放回抽样
min_samples_split:节点划分最少样本数
min_samples_leaf:叶子节点的最小样本数
超参数:n_estimator,max_depth,min_samples_split,min_samples_leaf
4.6 线性回归
4.6.1 什么是线性回归
利用回归方程(函数)对一个或多个自变量(特征值)与隐因变量(目标值)之间关系进行建模的一种分析方式
特点: 只有一个自变量的情况称为单变量回归,多于一个自变量情况的叫做多元
通用公式:h(w)=w1x1+w2x2+w3x3...+b=wTx+b
其中w,x,可以理解为矩阵:w(b,w1,w2)T,x=(1.x1.x2)T
线性模型
自变量一次
y=w1x1+w2x2+w3x3....+b
参数一次
y=w1x1+w2x2^2+w3x3^3....+b
线性关系一定是线性模型,线性模型不一定是线性关系
4.6.2 线性回归的损失和优化原理
目标:球模型参数
模型参数能够使预测准确
损失函数/cost/成本函数
f(θ)=∑(m,i=1)(hw(xi)-yi)^2
yi为第i个训练样本的真实值
h(xi)为第i个训练样本特征值组合预测函数
又称最小二乘法
优化方法:
正规方程
w=(XTX)^(-1)XTy
X为特征值矩阵,y为目标矩阵。直接求得最好的结果
当特征过多复杂时,求解速度太慢,并且得不到结果
梯度下降
w1:=w1-a(bcost(w0+w1x1)/bw1)
a:学习率/步长,a旁的整体表示方向沿着这个函数下降的方向找,最后就能找出山谷的最低点,然后更新w值
使用:面对训练数据规模十分庞大的任务,能够找到较好的结果
4.6.3 线性回归API
sklearn.linear_model.LinerRegression(fit_intercept=True)
通过正规方程优化
fit_intercept:是否计算偏置
LinerRegression.coef_:回归系数
LinerRegression.intercent:偏置
sklearn.linear_model.SGDRegressor(loss="squared_loss",fit_intercept=True,learning_rate='invscaling',eta0=0.01)
SGDRegressor类实现了随机梯度下降学习,它不支持不同的loss函数和正则化惩罚项来拟合线性回归模型
loss:损失类型 squared_loss 普通最小二乘法
fit_intercept:是否计算偏置
learning_rate:string optional 学习率填充
SGDRegression.coef_:回归系数
SGDRegression.intercent:偏置
4.6.4 回归性能评估
均方误差(Mean Squared Error) MSE评价机制:
MSE=(1/m)∑(m,i=1)(yi-ave(y))^2
sklearn.metrics.mean_squared_ error(y_true,y_pred)
均方误差回归损失
y_true:真实值
y_pred:预测值
return:浮点数结果
4.6.5 关于优化方法GD、SGD、SAG
GD:原始的梯度下降法需要计算所有样本的值才能够得出梯度,计算量大,所以后面才会有一系列的改进
SGD:随机梯度下降,高效,容易实现。需要许多超参数:比如正则项参数,迭代数。对于特征标准化是敏感的
SAG:随机平均梯度下降,犹豫收敛速度太慢,有人提出SAG等基于梯度下降的算法
4.7 欠拟合与过拟合
过拟合:在训练集上表现很好,在测试机上表现不好
4.7.1 欠拟合与过拟合
欠拟合:学习特征过少,区分标准太过粗糙
过拟合:学习特征过多,
一个假设在训练集上嫩巩固获得比其他假设更好的拟合
4.7.2 原因以及解决办法
欠拟合:增加特征
过拟合:正则化
正则化:
L2正则化:
作用:可以使得其中一些W的都很小,都接近于0,削弱摸个特征的影响
有点:越小的参数说明模型越简单,越简单的模型越不容易产生过拟合现象
Ridge回归
加入L2正则化后的损失函数
J(w)=(1/2m)∑(m,i=1)(hw(xi)-yi)^2+λ∑(n,j=1)wj^2
m为样本数,n为特征数,λ惩罚的步长
L1正则化:
作用:可以使得其中一些W的值直接为0,撒很难出这个特征的影响
LASSO回归
4.8 线性回归的改进-岭回归
4.8.1 带有L2正则化的线性回归-岭回归
岭回归,企事业是一种线性回归。只不过在算法建立回归方程的时候,加上正则化的限制,从而达到解决过拟合的效果
API:
Sklearn.linear_model.Ridge(alpha=1.0,fit_intercept=true,solver="auto",normalize=False)
具有L2正则化的线性回归
alpha:正则化力度,也加λ(0~1 1~10)
solver:会根据数据自动选择优化方法 sag如果数据集、特征都比较大,选择该随机梯度下降优化
normalize:数据是否进行标准化
Ridge.coef_:回归权重
Ridge.intercent_:回归偏置
正则化力度越大,权重系数越小。正则化力度越小,权重系数越大
4.9 分类算法逻辑回归与二分类
4.9.1 逻辑回归应用场景
广告点击率,是否为垃圾邮件,是否患病,金融诈骗,虚假账号
4.9.2 逻辑回归原理
1. 输入
h(w)=w1x1+w2x2+w3x3+...+b
逻辑回归的输入就是线性回归的结果
2. 激活函数
sigmoid函数
g(x)=1/(1+e^(-x))
假设函数/线性模型
1/(1+e^(-(w1x1+w2x2+....+b)))
损失函数
(y_predict-y_true)平方和/总数
逻辑回归真实值/预测值 是否属于某个类别
优化损失:梯度下降
3 逻辑回归API
sklearn.linear_model.LogisticRefression(solve='liblinear',penaity='12',C=1.0)
solver:优化求解方式 sag 根据数据及自动选择,随机平均梯度下降
penalty:正则化的种类
c:正则化的力度
默认将类别数量最少的当做正例
4.9.3 准确率和召回率
1 混淆矩阵
TP: True Possitive
FN: False Negative
精确率:结果为正例样本中真实为正例的比例
召回率:真实为正例的样本中预测结果为正例的比例
F1-score 反映了模型的稳健性
F1=(2TP)/(2TP+FN+FP)
2. 分类评估报告API
sklearn.metrics.classification_report(y_true,y_pred,labels=[],target_names=None)
y_true:真实目标值
y_pred:估计器预测目标值
labels:指定类别对应的数字
target_names:目标类别名称
return:每个类别精确率与召回率
4.9.4 ROC曲线和AOC指标
1. TPR与FPR
TPR=TP/(TP+FN)
所有真实类别为1的样本中,预测列别为1的比例
FPR=FP(FP+TN)
所有真实类别为0的样本中,预测类别为1的比例
2. ROC曲线
ROC曲线的横轴就是FPRate,纵轴就是TPRate,当两者相等时,表示的意义则是:不论真实类别是1还是0的样本,分类器预测为1的概率是平等的
3 AUC指标
AUC的概率意义是随机取一对正负样本,正样本得分大于负样本的概率
AUC的最小值为0.5,最大值为1,取得越高越好
AUC=1,完美分类器
0.5<AUC<1,优于随机分类器
4. AUC计算API
Sklearn.metrics.roc_auc_score(y_true,y_score)
计算ROC曲线面积,即AUC值
y_true:每个样本的真实类别,必须为0(反例)1(正例)标记
y_score:预测得分,可以是正类的估计概率、置信值或者分类器方法的返回值
4.5 模型保存与加
4.5.1 sklearn模型的保存与加载
sklearn.externals import joblib
保存:joblib.dump('test.pkl')
加载:estimator=joblib.load('test.pkl')
4.10 无监督学习-K-means算法
4.10.1 无监督学习包含算法
聚类:K-means
降维:PCA
4.10.2 K-means聚类步骤
1.随机设置K个特征空间内的点作为初始聚类中心
2.对于其他每个店计算到K个中心点的距离,位置的点选择最近的一个聚类中心作为标记类别
3.接着对标记的聚类中心之后,重新计算出每个聚类的新中心点(聚类之)
4.如果计算得出的新中心点与源中心点一样,那么结束,否则重新进行第二部过程
4.10.3 K-meansAPI
sklearn.cluster.KMeans(n_cluster=8,init='k-means++')
k-means聚类
n_cluster:开始的聚类中心的数量
inti:初始化方法,默认为'k-means++'
labels_:默认标记的类型,可以和真实值比较(不是值比较)
4.10.4 轮廓系数
sci=(bi-ai)/(max(bi,ai))
bi 外部距离 ai 内部距离
sci越接近于1,聚类效果越好
sci越接近于-1,聚类效果越差
轮廓系数API:
sklearn.metrics.silhuoette.score(X,labels)
计算所有样本的平均轮廓系数
X:特征值
labels:被聚类标记的目标值
用户聚类结果评估
silhuoette_score(cust,pre)
4.10.5 K-means总结
采用迭代算法,直观易懂并且非常实用
缺点:容易收敛到局部最优解(多次聚类)
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)