黑马机器学习笔记(二)

Sklearn转换器和预估器

在这里插入图片描述
估计器(sklearn机器学习算法的实现)
在sklearn中,估计器(estimator)是一个重要的角色,是一类实现了算法的API
1、用于分类的估计器:
sklearn.neighbors k-近邻算法
sklearn.naive_bayes 贝叶斯
sklearn.linear_model.LogisticRegression 逻辑回归
sklearn.tree 决策树与随机森林
2、用于回归的估计器:
sklearn.linear_model.LinearRegression 线性回归
sklearn.linear_model.Ridge 岭回归
3、用于无监督学习的估计器
sklearn.cluster.KMeans 聚类

K-近邻算法(KNN)

K是取值,
核心思想:根据你的邻居推断出你的类别

原理:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。
两个样本的距离可以通过如下公式计算,又叫欧式距离
在这里插入图片描述
当K=1时,如果刚好是一个异常值,就会造成错误分类(容易受到异常点的影响)

曼哈顿距离:|a1-b1|+|a2-b2|+|a3-b3|,又叫绝对值距离
明科夫斯基距离:暂不了解
当K取值过大,容易受到样本不均衡的影响

.K-近邻总结
优点:简单,易于理解,易于实现,无需训练
缺点
1)必须指定K值,K值选择不当则分类精度不能保证
2)懒惰算法,对测试样本分类时的计算量大,内存开销大
使用场景:小数据场景,几千~几万样本,具体场景具体业务去测试

模型选择与调优

交叉验证目的:为了让被评估的模型更加准确可信
交叉验证:将拿到的训练数据,分为训练和验证集。以下图为例:将数据分成5份,其中一份作为验证集。然后经过5次(组)的测试,每次都更换不同的验证集。即得到5组模型的结果,取平均值作为最终结果。又称5折交叉验证。
我们之前知道数据分为训练集和测试集,但是为了让从训练得到模型结果更加准确。做以下处理
训练集:训练集+验证集
测试集:测试集
在这里插入图片描述
超参数搜索-网格搜索(Grid Search)
通常情况下,有很多参数是需要手动指定的(如k-近邻算法中的K值),这种叫超参数。但是手动过程繁杂,所以需要对模型预设几种超参数组合。每组超参数都采用交叉验证来进行评估。最后选出最优参数组合建立模型。
在这里插入图片描述sklearn.model_selection.GridSearchCV(estimator, param_grid=None,cv=None)
对估计器的指定参数值进行详尽搜索
estimator:估计器对象
param_grid:估计器参数(dict){“n_neighbors”:[1,3,5]}
cv:指定几折交叉验证

fit:输入训练数据
score:准确率
结果分析:
bestscore:在交叉验证中验证的最好结果_
bestestimator:最好的参数模型
cvresults:每次交叉验证后的验证集准确率结果和训练集准确率结果

案例:预测FaceBook签到位置

获取数据
import pandas as pd
data=pd.read_csv("./FBlocation/train.csv")#这个数据集太大了,有1.27G
数据处理:
在这里插入图片描述

import pandas as pd
data=pd.read_csv("./train.csv")
#数据处理,缩小数据范围
data.query("x<2.5&x>2&y<2.5&y>1.0")
#处理时间特征
time_value=pd.to_datetime(data["time"],unit="s")
time_value.values
date=pd.DateIndex(time_value)
date.weekday
data["day"]=date.day
#过滤掉签到次数少的地点
placeCount=data.groupby("place_id").count()["row_id"]#输出每一个地点以及每一个地点签到的次数
placeCount[placeCount>3]#筛选出签到次数>3的地方
data_final=data[data["place_id"].isin(place_count[place_count>3].index.values)]

#筛选特征值和目标值
x=data_final[["x","y","accuracy","day","weekday","hour"]]
y=data_final["place_id"]

#数据集划分
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test=train_test_split(x,y)

from sklearn.processing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier

from sklearn.model_selection import GridSearchCV
#特征工程,标准化
transfer=StandardScaler()
x_train=transfer.fit_transform(x_train)
x_test=transfer.transfor(x_test)
#KNN算法预估器
estimater=KNeighborsClassifier()
#加入网络搜索与交叉验证
#参数准备
param_dict={"n_neighbors":[1,3,5,7,9,11]}
estimater=GridSearchCV(estimater,param_grid=param_dict,cv=10)
estimater.fit(x_train,y_train)

#模型评估
#方法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)

#最佳参数
estimater.best_prams_
#最佳结果
estimater.best_score_
#最佳估计器
estimater.bestz-estimator_
#交叉验证结果
estimater.cv_results_

朴素贝叶斯算法

在这里插入图片描述如上图,经过朴素贝叶斯分类,文章1是科技类的概率是超过50%,占比最大,所以分为科技类,同理,文章4为金融类

朴素:假设特征与特征之间相互独立
原理:朴素+贝叶斯(相互独立+贝叶斯公式)
应用场景:文本分类

朴素贝叶斯算法对文本分类

决策树

原理:决策树思想的来源非常朴素,程序设计中的条件分支结构就是if-else结构,最早的决策树就是利用这类结构分割数据的一种分类学习方法
思想:如何高效地进行决策
信息论基础
信息:消除随机不定性的东西
H的专业术语称之为信息熵,单位为比特。
在这里插入图片描述
在这里插入图片描述
信息的衡量–信息量—信息熵

决策树算法对鸢尾花分类

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值