文章目录
一.数据集
1.scikit-learn 数据集
scikit-learn 自带数据集,可以直接获取,也可以从网上获取
API *表示通用具体的实际中是不同名字
load* 和fetch*返回的数据类型datasets.base.Bunch(字典格式),key值如下
data:特征数据数组,是 [n_samples * n_features] 的二维 numpy.ndarray 数组
target:标签数组,是 n_samples 的一维 numpy.ndarray 数组
DESCR:数据描述
feature_names:特征名,新闻数据,手写数字、回归数据集没有
target_names:标签名,回归数据集没有
2.数据集的划分
机器学习一般的数据集会划分为两个部分:
训练数据:用于训练,构建模型 大约占75%
测试数据大约占25%:在模型检验时使用,用于评估模型是否有效
数据集划分API:sklearn.model_selection.train_test_split
x_train,x_test,y_train,y_test = train_test_split(iris.data,iris.target,test_size=0.25)
3.估计器
估计器的工作流程
二.k-近邻算法
1.原理:
定义:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。相似的样本,对应的特征的值是相似的
判断相似度是通过“距离”来判断,距离公式如下:
有公式就可以看出需要在计算距离之前,要进行归一化
2.API
3.优缺点
优点:
简单,易于理解,易于实现,无需估计参数,无需训练
缺点:
懒惰算法,对测试样本分类时的计算量大,内存开销大必须指定K值,K值选择不当则分类精度不能保证
如果k的值较大容易造成比例变化,比如训练样本中和检测样本的距离近的只要几个,可是k取了很多就会导致距离最近的比例反而不高,如果k值太小的化,很可能受异常点的影响。
4.鸢尾花案例
# 读取数据集细节资料
from sklearn.datasets import load_iris
iris = load_iris()
print(iris)
# 对数据集进行随机分割
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.25, random_state=33)
# 对数据进行标准化
from sklearn.preprocessing import StandardScaler
ss = StandardScaler()
X_train = ss.fit_transform(X_train)
X_test = ss.transform(X_test)
# 使用K近邻分类器对数据进行类别预测
from sklearn.neighbors import KNeighborsClassifier
knc = KNeighborsClassifier()
knc.fit(X_train, y_train)
y_predict = knc.predict(X_test)
# 对K近邻分类器的预测性能进行评估
print('The accuracy of K-Nearest Neighbor Classifier is', knc.score(X_test, y_test))
from sklearn.metrics import classification_report
print(classification_report(y_test, y_predict, target_names=iris.target_names))
三.分类模型评估
1.混淆矩阵
不管是几分类,每个标签值,每个检测集合的样本的预测值只有是这个标签和不是这个标签,前者称为正例,后者称为反例
2.准确率,精确率,召回率
(1)准确率(预测准确的数量占所有预测的数量)
准确率越高,说明越有可能预测正确
(2)精确率
预测结果为正例样本中真实为正例的比例(查得准)
精确率越高:说明预测正例的可信度越高
(3)召回率:真实为正例的样本中预测结果为正例的比例(查的全,对正样本的区分能力)
召回率越高表示越不容易把正确的漏掉
(3)其他分类标准
其他分类标准,F1-score,反映了模型的稳健型
(4)API
sklearn.metrics.classification_report
iris的预测评估最后两个一个是平均值,还有一个是加权平均值
四.朴素贝叶斯算法
朴素的意思就是样本特征值直接互相独立
1.原理
通过计算,在文章这些特征值出现的情况下,文章是某一分类的概率
根据贝叶斯公式
P©每个文档类别的概率
P(W|C)给定类别下特征的概率
P(F1,F2…|C)=P(F1|C)P(F2=|C)…
以上F1…FN是训练集中的特征值,概率是在训练集训练的模型基础上得到
例子
这里只需要比较概率大小,所以下面相同的特征值的概率就可以抵消,这里概率为0显然是不合适的需要进行拉普拉斯平滑
2.API
3.优缺点
优点:
朴素贝叶斯模型发源于古典数学理论,有稳定的分类效率。对缺失数据不太敏感,算法也比较简单,常用于文本分类。分类准确度高,速度快
缺点:
需要知道先验概率P(F1,F2,…|C),因此在某些时候会由于假设的先验模型的原因导致预测效果不佳。
有时候没有办法刚好完全的条件独立
五.模型的选择与调优
1.交叉验证
为了让被评估的模型更加准确可信
方法:将拿到的数据,分为训练和验证集。以下图为例:将数据分成5份,其中一份作为验证集。然后经过5次(组)的测试,每次都更换不同的验证集。即得到5组模型的结果,取平均值作为最终结果。又称5折交叉验证。n折将数据分成n行,n列
2.网格搜索
通常情况下,有很多参数是需要手动指定的(如k-近邻算法中的K值,表示取多少相似的),这种叫超参数。但是手动过程繁杂,所以需要对模型预设几种超参数组合。每组超参数都采用交叉验证来进行评估。最后选出最优参数组合建立模型。(对数据分割进行优化)
API:sklearn.model_selection.GridSearchCV
最好结果是在交叉验证中的是不包含测试集合,即得出来的是在某个超参数的取值下,训练集训练出的模型的得分(因为在交叉验证中又会分出测试集合)。
六.决策树与随机森林
1.决策树
(1)简介
决策树就是用来分类的一棵树,叶子节点是类别,分支是针对特征值的条件
(2)信息增益
决策树的划分依据之一就是信息增益
信息增益表示得知特征X的信息而使得类Y的信息的不确定性减少的程度
特征A对训练数据集D的信息增益g(D,A),定义为集合D的信息熵H(D)与特征A给定条件下D的信息条件熵H(D|A)之差,即公式为:
(3)生成决策树的方法
ID3(通过信息增益选择特征)C4.5(通过信息增益比选择特征)CART(平方误差最小的方式)
详细介绍添加链接描述
(4)API
(5)决策树的本地保存
2.随机森林
定义:在机器学习中,随机森林是一个包含多个决策树的分类器,并且其输出的类别是由个别树输出的类别的众数而定。
原理:
根据下列算法而建造每棵树:
用N来表示训练用例(样本)的个数,M表示特征数目。输入特征数目m,用于确定决策树上一个节点的决策结果;其中m应远小于M。从N个训练用例(样本)中以有放回抽样的方式,取样N次,形成一个训练集(即bootstrap取样),并用未抽到的用例(样本)作预测,评估其误差。
API:
# 随机森林进行预测 (超参数调优)
rf = RandomForestClassifier()
param = {"n_estimators": [120, 200, 300, 500, 800, 1200], "max_depth": [5, 8, 15, 25, 30]}
# 网格搜索与交叉验证
gc = GridSearchCV(rf, param_grid=param, cv=2)
gc.fit(x_train, y_train)