机器学习算法

k-近邻

       如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。

需要进行标准化处理

欧氏距离公式:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20 200305235109780.png) 在这里插入图片描述在这里插入图片描述
k值取很小:容易受异常点影响
k值取很大:容易受最近数据太多导致比例变化

优点
       简单,易于理解,易于实现,无需估计参数(不是训练模型中的超参数,是算法里的自带参数,不会随加入数据量的大小产生变化,即输入样本量的大小不会对改模型产生影响),无需训练

缺点
       懒惰算法,对测试样本分类时的计算量大,内存开销大
       必须指定K值,K值选择不当则分类精度不能保证

使用场景:小数据场景,几千~几万样本,具体场景具体业务去测试 。

要记得进行特征工程的标准化,可以大幅提高模型的准确率。

贝叶斯方法

       贝叶斯方法的特点是结合先验概率和后验概率,即避免了只使用先验概率的主观偏见,也避免了单独使用样本信息的过拟合现象。

朴素贝叶斯

       朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法。
       最为广泛的两种分类模型是决策树模型(Decision Tree Model)和朴素贝叶斯模型(Naive Bayesian Model,NBM)。

朴素贝叶斯算法:
在这里插入图片描述
文本分类的应用:
       朴素贝叶斯分类算法是学习效率和分类效果较好的分类器之一。直观的文本分类算法,也是最简单的贝叶斯分类器,具有很好的可解释性,朴素贝叶斯算法特点是假设所有特征的出现相互独立互不影响,每一特征同等重要
       但事实上这个假设在现实世界中并不成立:首先,相邻的两个词之间的必然联系,不能独立;其次,对一篇文章来说,其中的某一些代表词就确定它的主题,不需要通读整篇文章、查看所有词。所以需要采用合适的方法进行特征选择,这样朴素贝叶斯分类器才能达到更高的分类效率。

在这里插入图片描述在这里插入图片描述现有一篇被预测文档:出现了影院,支付宝,云计算,计算属于科技、娱乐的
类别概率?
在这里插入图片描述现有一篇被预测文档:出现了影院,支付宝,云计算,计算属于科技、娱乐的
类别概率?即,P(C|W)

先计算P(W|C) * P(C )=
在这里插入图片描述

拉普拉斯平滑

在这里插入图片描述

  sklearn.naive_bayes.MultinomialNB(alpha=1.0)
     alpha: 拉普拉斯平滑系数

由于没有超参数进行调节,没办法对准确率进行调节,朴素贝叶斯受训练集数据质量的影响非常大。

优点
       朴素贝叶斯模型发源于古典数学理论,有稳定的分类效率。

       对缺失数据不太敏感,算法也比较简单,常用于文本分类。

       分类准确度高,速度快

缺点
       假设了文章当中一些词语

       对缺失数据不太敏感,算法也比较简单,常用于文本分类。

       分类准确度高,速度快

精确率和召回率

true positive ; false negative
false positive ; true negative

精确率:预测结果为正例样本中真实为正例的比例(查得准)

在这里插入图片描述

召回率:真实为正例的样本中预测结果为正例的比例(查的全,对正样本的区分能力)
在这里插入图片描述

分类模型评估API

sklearn.metrics.classification_report

return:每个类别精确率召回率

其他分类标准,F1-score,反映了模型的稳健型

在这里插入图片描述
交叉验证
网格搜索

sklearn.model_selection.GridSearchCV

决策树

回归树预测:叶子上的平均值
分类树预测:叶子上少数服从多数

       信息的度量和作用

H = -(p1logp1 + p2logp2 + ... + p32log32)

       H的专业术语称之为信息熵,单位为比特。
公式:
在这里插入图片描述
信息熵越大,不确定性越大

决策树的划分依据之一——信息增益

特征A对训练数据集D的信息增益g(D,A),定义为集合D的信息熵H(D)与特征A给定条件下D的信息条件熵H(D|A)之差,即公式为:
在这里插入图片描述
决策树的划分依据之二——信息增益比
信息增益训练数据集D关于特征A的值的熵之比
在这里插入图片描述在这里插入图片描述n是特征A取值的个数。
信息增益会偏向取值更多的属性,而信息增益比不会。

分类树: 基尼系数 最小的准则 在sklearn中可以选择划分的默认原则

# 获取数据
data=pd.read_csv("http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt")

# 处理数据,找出特征值和目标值
y=data['survived']
x=data[['pclass','age','sex']]

# 缺失值处理
x["age"]=x["age"].fillna(x['age'].mean())

# 分割数据集到训练集合测试集
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.2)

# 进行处理(特征工程)特征-》类别-》one_hot编码
std=DictVectorizer()
x_train=std.fit_transform(x_train.to_dict(orient='record'))
x_test=std.fit_transform(x_test.to_dict(orient='record'))

 # 用决策树进行预测
estimator=DecisionTreeClassifier(max_depth=8)
estimator.fit(x_test,y_test)
score=estimator.score(x_test,y_test)

# # 导出决策树的结构
export_graphviz(estimator,out_file=r'E:\lud\tree.dot'
                ,feature_names=['年龄', 'pclass=1st', 'pclass=2nd', 'pclass=3rd', '女性', '男性'])

需要安装graphviz将dot文件转换为pdf、png格式

优点
       简单的理解和解释,树木可视化。
       需要很少的数据准备,其他技术通常需要数据归一化,

缺点
       决策树学习者可以创建不能很好地推广数据的过于复杂的树,这被称为过拟合。
       决策树可能不稳定,因为数据的小变化可能会导致完全不同的树被生成

改进
       减枝cart算法
       随机森林

随机森林

       集成学习通过建立几个模型组合的来解决单一预测问题。它的工作原理是生成多个分类器/模型,各自独立地学习和作出预测。这些预测最后结合成单预测,因此优于任何一个单分类的做出预测。

       在机器学习中,随机森林是一个包含多个决策树分类器,并且其输出的类别是由个别树输出的类别的众数而定。
       例如, 如果你训练了5个树, 其中有4个树的结果是True, 1个数的结果是False, 那么最终结果会是True.

随机森林建立多个决策树的过程:
              N:训练用样本的个数,M:特征数目
       单个数的建立过程:
            1.随机在N个样本中选择一个样本,重复N次。(样本可重复)
            2.随机在M个特征中选出m个特征,m<<M。

(建立十棵决策树,其样本,特征大多不一样。随机有放回的抽样叫Bootstrap)

class sklearn.ensemble.RandomForestClassifier(n_estimators=10, criterion=’gini’,max_depth=None, bootstrap=True, random_state=None)

随机森林分类器
n_estimators:int,optional(default = 10) 森林里的树木数量
criteria:string,可选(default =“gini”)分割特征的测量方法
max_depth:int或None,可选(默认=无)树的最大深度
bootstrap:bool,optional(default = True)是否在构建树时使用放回抽样

优点
      在当前所有算法中,具有极好的准确率
      能够有效地运行在大数据集上
      能够处理具有高维特征的输入样本,而且不需要降维
      能够评估各个特征在分类问题上的重要性
      对于缺省值问题也能够获得很好得结果

线性回归

算法:线性回归
策略:损失函数
        最小二乘法即误差平方和

在这里插入图片描述
        线性回归的目的的找到最小损失对应的W值

        最小二乘法之梯度下降

优化
        正规方程

sklearn.linear_model.LinearRegression

        梯度下降

sklearn.linear_model.SGDRegressor

在这里插入图片描述小规模数据:LinearRegression(不能解决拟合问题)以及其它
大规模数据:SGDRegressor

过拟合
    原因
        原始特征过多,存在一些嘈杂特征, 模型过于复杂是因为模型尝试去兼顾各个测试数据点

    解决办法
        进行特征选择,消除关联性大的特征(很难做)
        交叉验证(让所有数据都有过训练)
        正则化

    L2正则化:Ridge regression 岭回归
        作用:可以使得W的每个元素都很小,都接近于0
        优点:越小的参数说明模型越简单,越简单的模型则越不容易产生过拟合现象
在这里插入图片描述从右往左,alpha越大,正则化力度越大,weight越趋近于零,模型越简单

模型的保存加载API

joblib.dump(rf,'test.pkl')
estimator=joblib.load('test.pkl')

逻辑回归

二分类问题

逻辑回归的输入和线性回归的输入是一样的。
在这里插入图片描述
逻辑回归的公式:
在这里插入图片描述

    Z=回归的结果  
   
    输出:[0,1]区间的概率值,默认0.5作为阈值

g(z)是sigmoid函数

在这里插入图片描述逻辑回归的损失函数:对数似然损失
在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述
损失函数
    均方误差:不存在多个局部最低点,只有一个最小值
    对数似然损失:多个局部最小值,目前无法确定全局最小值

        也是用梯度下降求解

  1. 多次随机初始化,多次比较最小值结果
  2. 求解过程当中,调整学习率

其实就是对似然函数取对数 然后对对数似然函数求偏导 利用梯度下降求最优解

似然函数
在这里插入图片描述

对数释然
在这里插入图片描述

转化为求J
在这里插入图片描述

最后求偏导
在这里插入图片描述
对数损失函数都是依据最大似然估计来计算的
一组参数在一堆数据下的似然值,等于每一条数据在这组参数下的条件概率之积。
而损失函数一般是每条数据的损失之和,为了把积变为和,就取了对数。
再加个负号是为了让最大似然值和最小损失对应起来。

在这里插入图片描述

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值