zoukankan      html  css  js  c++  java
  • 3.分类算法目标值离散型

    一、k-近邻算法

    1、工作机制

    • 给定一个测试样本
    • 计算它到训练样本的距离
    • 取离测试样本最近的k个训练样本
    • “投票法”选出在这k个样本中出现最多的类别,就是预测的结果

    2、计算距离公式(欧式距离)

    3、api

     4、优缺点

    5、使用交叉验证和网格搜索对k近邻算法调优

    1)交叉验证

    1. 目的

    交叉验证的目的是为了让模型评估更加准确可信。

    2. 基本思想

    基本思想是将原始数据(dataset)进行分组,一部分做为训练集(train set),另一部分做为验证集(validation set or test set),首先用训练集对分类器进行训练,再利用验证集来测试训练得到的模型,以此来作为评价分类器的性能指标。

    2)网格搜索

    通常情况下,很多超参数需要调节,但是手动过程繁杂,所以需要对模型预设几种超参数组合,每组超参数都采用交叉验证来进行评估。最后选出最优参数组合建立模型。

    api:

     代码:

    knn = KNeighborsClassifier() #注意不用设置k值
    
    param = {"n_neighbors": [3,5,10]}
    gscv = GridSearchCV(knn, param_grid=param, cv=10)
    
    gscv.fit(x_train, y_train)
    
    print(gscv.score(x_test, y_test))
    print(gscv.best_score_)
    print(gscv.best_estimator_)
    print(gscv.best_params_)
    print(pd.DataFrame(gscv.cv_results_).T)

    二、朴素贝叶斯算法

    1、工作原理

    朴素贝叶斯法(Naive Bayes)是基于贝叶斯定理与特征条件独立假设的分类方法。对于给定的训练数据集,首先基于特征条件独立假设学习输入/输出的联合概率分布;然后基于此模型,对给定的输入 xx ,利用贝叶斯定理求出后验概率最大的输出 yy 。

    2、公式

    3、api

    4、案例

     代码:

    from sklearn.datasets import fetch_20newsgroups
    from sklearn.model_selection import train_test_split
    from sklearn.feature_extraction.text import TfidfVectorizer
    from sklearn.naive_bayes import MultinomialNB
    
    def naviebayes():
        #获取数据集
        news = fetch_20newsgroups(subset='all')
    
        #进行数据分割
        x_train,x_test,y_train,y_test = train_test_split(news.data,news.target,test_size=0.25)
    
        #对数据集进行特征抽取
        tf = TfidfVectorizer()
        #对训练集中词的列表进行重要性统计
        x_train = tf.fit_transform(x_train)
        x_test = tf.transform(x_test)
    
        #进行朴素贝叶斯算法的预测
        mlt = MultinomialNB(alpha=1.0)
        mlt.fit(x_train,y_train)
    
        #打印预测结果
        y_predict = mlt.predict(x_test)
        print("预测结果为:",y_predict)
    
        #打印准确率
        ret = mlt.score(x_test,y_test)
        print("准确率为:",ret)
    
        return None
    
    
    if __name__ == "__main__":
        naviebayes()

    结果:

    预测结果为: [ 8  0  5 ... 11 13 16]
    准确率为: 0.847623089983022

    5、优缺点

    三、决策树

    1.原理

    在现实生活中,我们会遇到各种选择,不论是选择男女朋友,还是挑选水果,都是基于以往的经验来做判断。如果把判断背后的逻辑整理成一个结构图,你会发现它实际上是一个树状图,这就是我们今天要讲的决策树。

    2、几个概念

    将哪个属性作为决策树根节点是个关键问题,在这里我们先介绍两个指标:纯度和信息熵。

    纯度:你可以把决策树的构造过程理解成为寻找纯净划分的过程。数学上,我们可以用纯度来表示,纯度换一种方式来解释就是让目标变量的分歧最小。
    
    信息熵:表示信息的不确定度
    
    
    信息熵越大,纯度越低。当集合中的所有样本均匀混合时,信息熵最大,纯度最低。

    我们在构造决策树的时候,会基于纯度来构建。而经典的 “不纯度”的指标有三种,分别是信息增益(ID3 算法)、信息增益率(C4.5 算法)以及基尼指数(Cart 算法)

    3、api

    4、案例

     代码:

    import pandas as pd
    from sklearn.model_selection import train_test_split
    from sklearn.feature_extraction import DictVectorizer
    from sklearn.tree import DecisionTreeClassifier
    
    def decisionTree():
        #读取数据
        titan = pd.read_csv("http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt")
    
        #处理数据,找出特征值和目标值
        x = titan[['pclass','age','sex']]
        y = titan['survived']
    
        #处理缺失值 x['age'].mean()取平均值 inplace替换
        x['age'].fillna(x['age'].mean(),inplace=True)
    
        #分割数据
        x_train,x_test,y_train,y_test = train_test_split(x,y,train_size=0.25)
    
        #进行特征工程 x_train.to_dict(orient="records")将数据转换成字典形式
        dict = DictVectorizer(sparse=False)
        x_train = dict.fit_transform(x_train.to_dict(orient="records"))
        x_test = dict.transform(x_test.to_dict(orient="records"))
    
        #利用决策树进行预测
        dTree = DecisionTreeClassifier()
        dTree.fit(x_train,y_train)
    
        #预测准确率
        print("预测的准确率:",dTree.score(x_test,y_test))
    
        return None
    
    
    if __name__ == "__main__":
        decisionTree()

    5、决策树结构图

     

    6、优缺点

    四、随机森林

    1、简介

    随机森林是一种多功能的机器学习算法,能够执行回归和分类的任务。同时,它也是一种数据降维手段,用于处理缺失值、异常值以及其他数据探索中的重要步骤,并取得了不错的成效。另外,它还担任了集成学习中的重要方法,在将几个低效模型整合为一个高效模型时大显身手。

    在随机森林中,我们将生成很多的决策树,并不像在CART模型里一样只生成唯一的树。当在基于某些属性对一个新的对象进行分类判别时,随机森林中的每一棵树都会给出自己的分类选择,并由此进行“投票”,森林整体的输出结果将会是票数最多的分类选项;而在回归问题中,随机森林的输出将会是所有决策树输出的平均值。

    2、api

    4、代码案例

    将预测泰坦尼克号案例算法换成随机森林

     # -----------------利用随机森林进行预测----------------------
        rf = RandomForestClassifier()
        param = {"n_estimators":[120,200,300],"max_depth":[5,8,15]}
    
        #使用交叉验证和网格搜索对超参数进行调优
        gc = GridSearchCV(rf, param_grid=param,cv=2)
        gc.fit(x_train,y_train)
    
        #预测结果
        print("准确率:",gc.score(x_test,y_test))
        print("选择的模型:",gc.best_params_)

    结果:

    准确率: 0.8111675126903554
    选择的模型: {'n_estimators': 300, 'max_depth': 5}
  • 相关阅读:
    【转】CUDA5/CentOS6.4
    【转】centos 6.4 samba 安装配置
    【转】Install MATLAB 2013a on CentOS 6.4 x64 with mode silent
    【转】Getting xrdp to work on CentOS 6.4
    【VLFeat】使用matlab版本计算HOG
    Unofficial Windows Binaries for Python Extension Packages
    March 06th, 2018 Week 10th Tuesday
    March 05th, 2018 Week 10th Monday
    March 04th, 2018 Week 10th Sunday
    March 03rd, 2018 Week 9th Saturday
  • 原文地址:https://www.cnblogs.com/linfinity/p/13744167.html
Copyright © 2011-2022 走看看