1.1 举例: 输出结果: 最终结果表明,未知电影属于爱情片,因为他与爱情片的距离最近。
1.2 分类算法-k近邻算法(KNN)介绍 定义:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。
计算距离公式:两个样本的距离可以通过如下公式计算,又叫欧式距离 比如说,a(a1,a2,a3),b(b1,b2,b3)
1.3 sklearn 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.4 实例分析: k近邻算法实例-预测入住位置 数据的处理 1、缩小数据集范围 DataFrame.query() 2、处理日期数据 pd.to_datetime pd.DatetimeIndex 3、增加分割的日期数据 data[ ] 4、删除没用的日期数据 pd.drop 5、将签到位置少于n个用户的删除 place_count =data.groupby(‘place_id’).aggregate(np.count_nonzero)tf = place_count[place_count.row_id > 3].reset_index() data = data[data[‘place_id’].isin(tf.place_id)]
此程序为没有进行特征化(标准化)处理时,进行KNN算法。输出结果为: 可以看出,在没有标准化的情况下,预测的准确率较低。
接下来是将数据进行特征处理后,观察特征值: 最后的输出结果: 可以看到,准确率大幅度提升。
1.5 k-近邻算法总结 k值取多大? k值取很小:容易受异常点影响 k值取很大:容易受最近数据太多导致比例变化
优点: 简单,易于理解,易于实现,无需估计参数,无需训练。 缺点: 1.懒惰算法,对测试样本分类时的计算量大,内存开销大 2.必须指定K值,K值选择不当则分类精度不能保证
使用场景: 小数据场景,几千~几万样本,具体场景具体业务去测试
一.应用: 二.联合概率和条件概率 P(文档类别1|文档特征值)
P(文档类别2|文档特征值)
… … 三.朴素贝叶斯-贝叶斯公式 公式分为三个部分:
训练集统计结果(指定统计词频): 现有一篇被预测文档:出现了影院,支付宝,云计算,计算属于科技、娱乐的 类别概率? 属于某个类别为0,合适吗? 拉普拉斯平滑: 三.代码实现 3.1sklearn朴素贝叶斯实现API sklearn.naive_bayes.MultinomialNB sklearn.naive_bayes.MultinomialNB(alpha = 1.0) 朴素贝叶斯分类 alpha:拉普拉斯平滑系数
3.2 算法案例: sklearn20类新闻分类 20个新闻组数据集包含20个主题的18000个新闻组帖子 流程: 1、加载20类新闻数据,并进行分割
2、生成文章特征词
3、朴素贝叶斯estimator流程进行预估 3.3 算法评价 优点: 朴素贝叶斯模型发源于古典数学理论,有稳定的分类效率。
对缺失数据不太敏感,算法也比较简单,常用于文本分类。
分类准确度高,速度快
缺点: 需要知道先验概率P(F1,F2,…|C),因此在某些时候会由于假设的先验 模型的原因导致预测效果不佳。
3.1定义: 交叉验证: 将拿到的数据,分为训练和验证集。以下图为例:将数据分成5份,其中一份作为验证集。然后经过5次(组)的测试,每次都更换不同的验证集。即得到5组模型的结果,取平均值作为最终结果。又称5折交叉验证。 超参数搜索-网格搜索: 通常情况下,有很多参数是需要手动指定的(如k-近邻算法中的K值),这种叫超参数。但是手动过程繁杂,所以需要对模型预设几种超参数组合。每组超参数都采用交叉验证来进行评估。最后选出最优参数组合建立模型。 3.2 网格搜索API sklearn.model_selection.GridSearchCV sklearn.model_selection.GridSearchCV(estimator, param_grid=None,cv=None) 对估计器的指定参数值进行详尽搜索 estimator:估计器对象 param_grid:估计器参数(dict){“n_neighbors”:[1,3,5]} cv:指定几折交叉验证 fit:输入训练数据 score:准确率 结果分析: best_score_:在交叉验证中测试的最好结果 best_estimator_:最好的参数模型 cv_results_:每次交叉验证后的测试集准确率结果和训练集准确率结果
3.3 程序 输出结果:
一般最常见使用的是准确率,即预测结果正确的百分比:estimator.score()
4.1 混淆矩阵 在分类任务下,预测结果(Predicted Condition)与正确标记(True Condition)之间存在四种不同的组合,构成混淆矩阵(适用于多分类)
精确率(Precision)与召回率(Recall) 精确率: 预测结果为正例样本中真实为正例的比例(查得准) 召回率: 真实为正例的样本中预测结果为正例的比例(查的全,对正样本的区分能力) 其他分类标准,F1-score,反映了模型的稳健型 3.2 分类模型评估API sklearn.metrics.classification_report klearn.metrics.classification_report(y_true, y_pred, target_names=None)
y_true:真实目标值
y_pred:估计器预测目标值
target_names:目标类别名称
return:每个类别精确率与召回率