分类算法
1. sklearn转换器和预估器
转换器
特征工程的步骤:
1、实例化 (实例化的是一个转换器类(Transformer))
2、调用fit_transform(对于文档建立分类词频矩阵,不能同时调用)
我们把特征工程的接口称之为转换器,其中转换器调用有这么几种形式
fit_transform
fit() 计算每一列的平均值、标准差
transform() (x-mean)/std的最终计算(标准化)
估计器
估计器(estimator)
1.实例化一个estimator
2.estimator.fit(x_train,y_train)(训练集的特征值和目标值)
调用完毕,模型生成
3.模型评估:
(1)直接比对真实值和预测值
y_predict = estimator.predict(x_test)
y_test == y_predict
(2)计算准确率
accuracy = estimator.score(x_test,y_test)
2. k-近邻算法(KNN)
核心思想:根据你的“邻居”来推断出你的类别
定义:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。
距离公式:欧式距离、曼哈顿距离、明可夫斯基距离
k值取小,容易收到异常值的影响
k值取大,受到样本不均衡的影响
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方法的值来决定最合适的算法。 (不同实现方式影响效率)
案例1:鸢尾花种类预测
(1)获取数据
(2)数据集划分
(3)特征工程:标准化
(4)KNN预估器流程
(5)模型评估
K-近邻总结
优点:
简单,易于理解,易于实现,无需训练
缺点:
懒惰算法,对测试样本分类时的计算量大,内存开销大
必须指定K值,K值选择不当则分类精度不能保证
使用场景:
小数据场景,几千~几万样本,具体场景具体业务去测试
3. 模型选择和调优
3.1什么是交叉验证(cross validation)
交叉验证:将拿到的训练数据,分为训练和验证集。以下图为例:将数据分成5份,其中一份作为验证集。然后经过5次(组)的测试,每次都更换不同的验证集。即得到5组模型的结果,取平均值作为最终结果。又称5折交叉验证。
交叉验证目的:为了让被评估的模型更加准确可信
3.2超参数搜索-网格搜索(Grid Search)
通常情况下,有很多参数是需要手动指定的(如k-近邻算法中的K值),这种叫超参数。但是手动过程繁杂,所以需要对模型预设几种超参数组合。每组超参数都采用交叉验证来进行评估。最后选出最优参数组合建立模型。
sklearn.model_selection.GridSearchCV(estimator, param_grid=None,cv=None)
案例2:鸢尾花种类预测,添加网格搜索和交叉验证
案列3:Facebook签到位置预测
(1)获取数据
(2)数据处理
a.缩小数据范围
2.0<x<2.5,1.0<y<1.5
b.time->年月日时分秒
c.过滤到签到次数少的地点
目标:特征值x,目标值y
(3)特征工程:标准化
(4)KNN算法预估流程
(5)模型选择与调优
(5)模型评估
4. 朴素贝叶斯算法
朴素:假设特征和特征之间是相互独立的
朴素贝叶斯算法:朴素+贝叶斯
应用场景:文本分类(单词作为特征)
sklearn.naive_bayes.MultinomialNB(alpha = 1.0)
朴素贝叶斯分类
alpha:拉普拉斯平滑系数
案例:20类新闻分类
(1)获取数据 —sklearn数据集,不需要数据处理
(2)数据集划分
(3)特征工程:文本特征抽取
(4)朴素贝叶斯预估器流程–模型
(5)模型评估
总结:
优点:
朴素贝叶斯模型发源于古典数学理论,有稳定的分类效率。
对缺失数据不太敏感,算法也比较简单,常用于文本分类。
分类准确度高,速度快
缺点:
由于使用了样本属性独立性的假设,所以如果特征属性有关联时其效果不好
5. 决策树
高效的进行决策:特征的先后顺序
信息论:
- 信息:消除不确定性的东西
- 信息的衡量:信息熵
- 信息增益
sklearn.tree.DecisionTreeClassifier(criterion=’gini’, max_depth=None,random_state=None)
案例:用决策树对鸢尾花进行分类
决策树可视化:sklearn.tree.export_graphviz() 该函数能够导出DOT格式
-
决策树总结
优点: 可视化,可解释能力强 缺点: 容易产生过拟合 改进: 减枝cart算法(决策树API当中已经实现,随机森林参数调优有相关介绍) 随机森林
案例:泰坦尼克号乘客生存预测
1)获取数据
2)数据处理:缺失值处理、特征值转换成字典类型
3)准备好特征值、目标值
4)划分数据集
5)特征工程:字典特征抽取
6)决策树预估器流程
7)模型评估
6. 随机森林
两个随机:
训练集随机:bootstrap 随机有放回的抽样
特征值随机
sklearn.ensemble.RandomForestClassifier(n_estimators=10, criterion=’gini’, max_depth=None, bootstrap=True, random_state=None, min_samples_split=2)
总结:
在当前所有算法中,具有极好的准确率
能够有效地运行在大数据集上,处理具有高维特征的输入样本,而且不需要降维
能够评估各个特征在分类问题上的重要性