机器学习(ML)(三)——分类算法

本文详细介绍了机器学习中的分类算法,包括KNN算法的工作原理、距离公式、优缺点及应用,朴素贝叶斯的基础、概率公式、应用场景,以及决策树的划分依据、信息增益、优缺点。此外,还讨论了模型选择与调优,特别是交叉验证和超参数搜索的重要性。文章以鸢尾花、Facebook签到位置预测和泰坦尼克乘客生存预测为例进行深入分析。
摘要由CSDN通过智能技术生成

分类算法

sklearn转换器和预估器

转换器——特征工程的父类

步骤:

1、实例化(实例化一个转换器类(Transformer))
2、调用fit_transform对于文档建立分类词频矩阵,不能同时调用

标准化公式:

(x-mean)/ std
fit_transform()

fit() ——计算每一列的平均值和标准差
transform() —— (x-mean)/ std进行最终的转换

估计器

在sklearn中,估计器是一个重要的角色
用于分类的估计器:

sklearn.neighbors
sklearn.naive_bayes
sklearn.linear_model.LogisticRegression
sklearn.tree

用于回归的估计器

sklearn.linear_model.LinearRegresssion
sklearn.linear_model.Ridge

用于无监督学习的估计器

sklearn.cluster.KMeans

估计器步骤:

1、实例化一个estimator
2、estimator.fit(x_train,y_train)——调用完毕,模型生成 3、模型评估
(1)直接比对真实值和预测值
y_predict=estimaor.predict(x_test) y_test==y_predict
(2)计算准确率
accuracy=estimator.score(x_test,y_test)

KNN算法

什么是KNN算法?

核心思想:根据你的邻居推断出你的类别。如果一个样本在特征空间中K个最相似的(特征空间中最邻近)的样本中大多数属于其中一个类别,则该样本也属于这个类别。

如何确定谁最邻近?

距离公式:

欧氏距离——平方根距离
在这里插入图片描述
曼哈顿距离——绝对值距离
明可夫斯基距离

具体案例:

有几部电影:
在这里插入图片描述
方法:
利用K近邻算法的思想
(1)计算与已知电影之间的距离:
k=1:爱情片
在这里插入图片描述
k=2:爱情片
k=6:无法确定

1、如果取得最近的电影数量不一样,出现的结果?
k值取得过大,容易出错(样本不均衡)
k值取得过小,容易受到异常点的影响
2、结合已经学习过的知识,分析KNN算法需要做什么样的处理?
无量纲化的处理(标准化)
使用方法:

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

n_neighbors=5 int可选,默认是5,k_neighbors查询默认使用的邻居数。
algorithm:['auto','ball_tree','kd_tree','brute']可选用于计算最近邻居的算法:ball_tree’将会使用BallTree,kd_tree’将使用KDTree。‘auto’将尝试根据传递给fit方法的值来决定最合适的算法。(不同实现方式影响效率)

def knn_iris():
   #1)获取数据
   iris load_iris()
   #2)划分数据集
   x_train,x_test,y_train,y_test=train_test_split(iris.data,iris.target,random_state=22)
   #3)特征工程:标难化
   transfer StandardScaler()
   x_train transfer.fit_transform(x_train)
   x_test transfer.transform(x_test)#训练集和测试机需要做相同的处理
   #4)KNN算法预估器
   estimator=KNeighborsClassifier(n_neighbors=3)
   estimator.fit(x_train,y_train)
   #5)模型评估
   #方法1:直接比对真实值和预测值
   y_predict estimator.predict(x_test)
   print("y_predict:\n",y_predict)
   print("直接比对真实值和预测值:\n",y_test=y_predict)
   #方法2:计算准确率
   score=estimator.score(x_test,y_test)
   print("准确率为:\n",score)

运行结果:
在这里插入图片描述

KNN算法优缺点

优点:
简单、易于理解,易于实现、无需训练
缺点:
懒惰算法,对测试样本分类时的计算量大,内容开销大
必须使用指定K值,K值选择不当则分类精度不能保证。

使用场景:

小数据场景,几千-几万样本,具体场景具体业务去测试。
模型的选择与调优

模型选择与调优:

交叉验证

将拿到的训练数据分为训练集和验证集,以下图为例,将数据分为4组,其中一份作为验证集,然后经过4次测试,每次更换不同的验证集,得到4组不同的验证集,得到四组模型的结果,取平均值作为最终结果。
在这里插入图片描述
目的:
为了让被评估的模型更加准确可信

超参数搜索:

通常情况下,有很多参数是需要手动指定的,这种叫做超参数,每组超参数都采用交叉验证来进行评估,最后选出最优参数组合建立模型。

sklearn.model_selection.GridSearchCV(estimator,param_grid=None,cv=None)

在这里插入图片描述
输出结果:
最佳参数:best_params
最住结果:best_score
最佳估计器:best_estimator
交叉验证结果:cv_results.

案例分析:鸢尾花案例增加K值调优

from sklearn.model_selection import GridSearchCV
def knn_iris():
   #1)获取数据
   iris load_iris()
   #2)划分数据集
   x_train,x_test,y_train,y_test=train_test_split(iris.data,iris.target,random_state=22)
   #3)特征工程:标难化
   transfer StandardScaler()
   x_train transfer.fit_transform(x_train)
   x_test transfer.transform(x_test)#训练集和测试机需要做相同的处理
   #4)KNN算法预估器
   estimator=KNeighborsClassifier(n_neighbors=3)
   #加入网格搜索与交叉验证
   params_dict={
   "n_neighbors":[1,3,5,7,9,11]}
   estimator=GridSearchCV(estimator,params_grid=params_grid,cv=10)
   estimator.fit(x_train,y_train)
   #5)模型评估
   #方法1:直接比对真实值和预测值
   y_predict estimator.predict(x_test)
   print("y_predict:\n",y_predict)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值