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}
原文地址:https://www.cnblogs.com/dominik/p/13744167.html