黑马程序员---三天快速入门Python机器学习(第二天)(下)

简介: 黑马程序员---三天快速入门Python机器学习(第二天)

3.4.2 概率基础


1 概率(Probability)定义


  • 概率定义为一件事情发生的可能性


  • 取值[0,1]


2 女神是否喜欢计算案例



3.4.3 联合概率、条件概率与相互独立



3.4.4 贝叶斯公式



朴素?


假设:特征与特征之间相互独立


朴素贝叶斯算法?


朴素+贝叶斯


应用场景:文本分类,单词作为特征



4 拉普拉斯平滑系数



3.4.5 API


sklearn.naive_bayes.MultinomialNB(alpha=1.0)


  • 朴素贝叶斯分类


  • alpha:拉普拉斯平滑系数


3.4.6 案例:20类新闻分类


1 步骤分析


1)获取数据


2)划分数据集


3)特征工程:文本特征抽取


4)朴素贝叶斯预估器流程


5)模型评估


3.4.7 朴素贝叶斯算法总结


优点:


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


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


  • 分类准确度高,速度快


缺点:


  • 由于使用了样本属性独立性的假设,所以如果特征属性有关联时其效果不好


from sklearn.model_selection import train_test_split    # 划分数据集
from sklearn.datasets import fetch_20newsgroups
from sklearn.feature_extraction.text import TfidfVectorizer  # 文本特征抽取
from sklearn.naive_bayes import MultinomialNB           # 朴素贝叶斯
def nb_news():
    """
    用朴素贝叶斯算法对新闻进行分类
    :return:
    """
    # 1)获取数据
    news = fetch_20newsgroups(subset='all')
    # 2)划分数据集
    x_train, x_test, y_train, y_test = train_test_split(news.data, news.target)
    # 3)特征工程:文本特征抽取
    transfer = TfidfVectorizer()
    x_train = transfer.fit_transform(x_train)
    x_test = transfer.transform(x_test)
    # 4)朴素贝叶斯算法预估器流程
    estimator = MultinomialNB()
    estimator.fit(x_train, y_train)
    # 5)模型评估
    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("准确率:", score)
    return None
if __name__ == "__main__":
    nb_news()


y_predict:
 [ 2  8 10 ... 11 11  7]
直接必读真实值和预测值:
 [ True  True  True ...  True False  True]
准确率: 0.8471986417657046


3.5 决策树


学习目标:


  • 说明信息熵的公式以及作用


  • 说明信息增益的公式作用


  • 应用信息熵实现计算特征的不确定性减少程度


  • 了解决策树的三种算法实现


3.5.1 认识决策树


决策树思想的来源非常朴素,程序设计中的条件分支结构就是if-else结构,最早的决策树就是利用这类结构分割数据的一种分类学习方法



3.5.2 决策树分类原理详解



1 原理


信息熵、信息增益等


2 信息熵的定义



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




3.5.3 决策树API


sklearn.tree.DecisionTreeClassifier(criterion='gini', max_depth=None, random_state=None)


  • 决策树分类器


  • criterion:默认是“gini”系数,也可以选择信息增益的熵‘entropy’


  • max_depth:树的深度大小


  • random_state:随机数种子


3.5.4 决策树用于鸢尾花数据集


from sklearn.datasets import load_iris                  # 获取数据集
from sklearn.model_selection import train_test_split    # 划分数据集
from sklearn.naive_bayes import MultinomialNB              # 朴素贝叶斯
from sklearn.tree import DecisionTreeClassifier
def decision_iris():
    """
    决策树对鸢尾花进行分类
    :return:
    """
    # 1)获取数据集
    iris = load_iris()
    # 2)划分数据集
    x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, random_state=22)  # 随机数种子
    # 不用做特征工程:标准化
    # 3)决策树预估器
    estimator = DecisionTreeClassifier(criterion='entropy')
    estimator.fit(x_train, y_train)
    # 4)模型评估
    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("准确率:", score)
  # 可视化决策树
    export_graphviz(estimator, out_file='iris_tree.dot', feature_names=iris.feature_names)
    return None
if __name__ == "__main__":
    decision_iris()


y_predict:
 [0 2 1 2 1 1 1 1 1 0 2 1 2 2 0 2 1 1 1 1 0 2 0 1 2 0 2 2 2 1 0 0 1 1 1 0 0
 0]
直接必读真实值和预测值:
 [ True  True  True  True  True  True  True False  True  True  True  True
  True  True  True  True  True  True False  True  True  True  True  True
  True  True  True  True  True False  True  True  True  True  True  True
  True  True]
准确率: 0.9210526315789473


3.5.5 决策树可视化


1 保存树的结构到dot文件


sklearn.tree.export_graphviz()  # 该函数能够导入dot文件
tree.export.graphviz(estimator, out_file='tree.dot', feature_names=[","])


2 网站显示结构


http://webgraphviz.com/


from sklearn.datasets import load_iris                  # 获取数据集
from sklearn.model_selection import train_test_split    # 划分数据集
from sklearn.tree import DecisionTreeClassifier, export_graphviz, plot_tree
import matplotlib.pyplot as plt
def decision_iris():
    """
    决策树对鸢尾花进行分类
    :return:
    """
    # 1)获取数据集
    iris = load_iris()
    # 2)划分数据集
    x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, random_state=22)  # 随机数种子
    # 不用做特征工程:标准化
    # 3)决策树预估器
    estimator = DecisionTreeClassifier(criterion='entropy')
    estimator.fit(x_train, y_train)
    # 4)模型评估
    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("准确率:", score)
    # 可视化决策树
    export_graphviz(estimator, out_file='iris_tree.dot', feature_names=iris.feature_names)
    plot_tree(decision_tree=estimator)
    plt.show()
    return None
if __name__ == "__main__":
    decision_iris()



3.5.6 决策树总结


优点:简单的理解和解释,树木可视化


缺点:决策树学习者可以创建不能很好地推广数据的过于复杂的树,这被称为过拟合

改进:


  • 剪枝cart算法(决策树API当中已经实现,随机森林参数调优有相关介绍)


  • 随机森林


3.5.7 案例:泰坦尼克号乘客生存预测


流程分析:特征值、目标值


1)获取数据


2)数据处理:缺失值处理,特征值->字典类型,


3)准备好特征值、目标值


4)划分数据集


5)特征工程:字典特征处理


6)决策树预估器流程


7)模型评估


import pandas as pd
# 1、获取数据
path = "C:/Users/zdb/Desktop/machine_learning/DataSets/titanic.csv"
titanic = pd.read_csv(path) #1313 rows × 11 columns
# 筛选特征值和目标值
x = titanic[["pclass", "age", "sex"]]
y = titanic["survived"]
# 2、数据处理
# 1)缺失值处理
x["age"].fillna(x["age"].mean(), inplace=True)
# 2)转换成字典
x = x.to_dict(orient="records")
from sklearn.model_selection import train_test_split
# 3、数据集划分
x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=22)
# 4、字典特征抽取
from sklearn.feature_extraction import DictVectorizer
transfer = DictVectorizer()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)
from sklearn.tree import DecisionTreeClassifier, export_graphviz
# 3)决策树预估器
estimator = DecisionTreeClassifier(criterion='entropy')
estimator.fit(x_train, y_train)
# 4)模型评估
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("准确率:", score)
# 可视化决策树
export_graphviz(estimator, out_file='titanic_tree.dot', feature_names=transfer.get_feature_names())
import matplotlib.pyplot as plt
from sklearn.tree import plot_tree
plot_tree(decision_tree=estimator)
plt.show()



3.6 集成学习方法之随机森林


学习目标:


  • 说明随机森林每棵决策树的建立过程


  • 直达为什么需要随机有放回(Booststrap)的 抽样


  • 说明随机森林的超参数


3.6.1 什么是集成学习方法


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


3.6.2 什么是随机森林


在机器学习中,随机森林是一个包含多个决策树的分类器,并且其输出的类别是由个别数输出的类别的众数而定


例如,如果训练了5棵树,5棵树的结果是True ,1棵树的结果是False,那么最终结果为True


3.6.3 随机森林原理过程


两个随机:


  • 训练集随机:BoostStrap,N个样本中随机有放回抽样


  • 特征值随机:从M个特征中随机抽取m个特征,M>>m


训练集:特征值、目标值


为什么采用BootStrap抽样


1、为什么要随机抽样训练集?


如果不进行随机抽样,每棵树的训练集都一样,那么最终训练出的树分类结果也是完全一样的


2、为什么要有放回地抽样?


如果不是有放回的抽样,那么每棵树的训练样本都是不同的,都是没有交集的,这样每棵树都是“有偏的”,都是绝对“片面的”,也就是说每棵树训练出来都是有很大的差异的;而随机森林最后分类取决于多棵树的投票表决


3.6.4 API


随机森林分类器


sklearn.ensemble.RandomForestClassifier(n_estimators=10, criterion='gini', max_depth=None, /
bootstrap=True, random_state=None, min_samples_split=2)


  • n_estimators:integer,optional(default=10)森林里的树木数量,可以用网格搜索


  • criteria:string,可选(default=‘gini’),分割特征的测量方法


  • max_depth:integer或None,可选(默认无),树的最大深度5,8,15,25,30 可以用网格搜索


  • max_teatures=‘auto’,每个决策树的最大特征数量


  • if ‘auto’ ,then max_features = sqrt(n_features)


  • if ‘sqrt’ ,then max_features = sqrt(n_features)


  • if ‘log2’ ,then max_features = log2(n_features)


  • if None,then max_features = n_features


  • booststrap:boolean,optional(default=True)是否在构建树时使用放回抽样


  • min_samples_split:节点划分最少样本数


  • min_samples_leaf:叶子节点的最小样本数


超参数:n_estimator,max_depth,min_samples_split,min_samples_leaf


3.6.5 随机森林案例预测


在之前的代码中增加这个代码块


from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import GridSearchCV
estimator = RandomForestClassifier()
# 加入网格搜索与交叉验证
# 参数准备
param_dict = {"n_estimators":[120,200,300,500,800,1200], "max_depth":[5,8,15,25,30]}
estimator = GridSearchCV(estimator, param_grid=param_dict, cv=3)  # 10折,数据量不大,可以多折
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("准确率:", score)
# 查看最佳参数:best_params_
print("最佳参数:", estimator.best_params_)
# 最佳结果:best_score_
print("最佳结果:", estimator.best_score_)
# 最佳估计器:best_estimator_
print("最佳估计器:", estimator.best_estimator_)
# 交叉验证结果:cv_results_
print("交叉验证结果:", estimator.cv_results_)



3.6.6 总结


  • 在当前所有算法中,具有极好的准确率


  • 能够有效地运行在大数据集上,处理具有高维特征的输入样本,而且不需要降维


  • 能够评估各个特征在分类问题上的重要性



相关文章
|
4天前
|
机器学习/深度学习 人工智能 算法
【昆虫识别系统】图像识别Python+卷积神经网络算法+人工智能+深度学习+机器学习+TensorFlow+ResNet50
昆虫识别系统,使用Python作为主要开发语言。通过TensorFlow搭建ResNet50卷积神经网络算法(CNN)模型。通过对10种常见的昆虫图片数据集('蜜蜂', '甲虫', '蝴蝶', '蝉', '蜻蜓', '蚱蜢', '蛾', '蝎子', '蜗牛', '蜘蛛')进行训练,得到一个识别精度较高的H5格式模型文件,然后使用Django搭建Web网页端可视化操作界面,实现用户上传一张昆虫图片识别其名称。
113 7
【昆虫识别系统】图像识别Python+卷积神经网络算法+人工智能+深度学习+机器学习+TensorFlow+ResNet50
|
2天前
|
机器学习/深度学习 算法 数据挖掘
Python机器学习10大经典算法的讲解和示例
为了展示10个经典的机器学习算法的最简例子,我将为每个算法编写一个小的示例代码。这些算法将包括线性回归、逻辑回归、K-最近邻(KNN)、支持向量机(SVM)、决策树、随机森林、朴素贝叶斯、K-均值聚类、主成分分析(PCA)、和梯度提升(Gradient Boosting)。我将使用常见的机器学习库,如 scikit-learn,numpy 和 pandas 来实现这些算法。
|
8天前
|
机器学习/深度学习 数据采集 算法
【机器学习】Scikit-Learn:Python机器学习的瑞士军刀
【机器学习】Scikit-Learn:Python机器学习的瑞士军刀
25 3
|
8天前
|
机器学习/深度学习 机器人 Python
实践指南,终于有大佬把Python和机器学习讲明白了!
机器学习正在迅速成为数据驱动型世界的一个必备模块。许多不同的领域,如机器人、医学、零售和出版等,都需要依赖这门技术。 机器学习是近年来渐趋热门的一个领域,同时 Python 语言经过一段时间的发展也已逐渐成为主流的编程语言之一。今天给小伙伴们分享的这份手册结合了机器学习和 Python 语言两个热门的领域,通过易于理解的项目详细讲述了如何构建真实的机器学习应用程序。
|
7天前
|
IDE Shell 程序员
[人间也值得] - Mryang带你快速入门第一个 Python 程序
[人间也值得] - Mryang带你快速入门第一个 Python 程序
6 0
|
5天前
|
机器学习/深度学习 人工智能 算法
算法金 | 统计学的回归和机器学习中的回归有什么差别?
**摘要:** 统计学回归重在解释,使用线性模型分析小数据集,强调假设检验与解释性。机器学习回归目标预测,处理大数据集,模型复杂多样,关注泛化能力和预测误差。两者在假设、模型、数据量和评估标准上有显著差异,分别适用于解释性研究和预测任务。
33 8
算法金 | 统计学的回归和机器学习中的回归有什么差别?
|
1天前
|
机器学习/深度学习 人工智能 自然语言处理
机器学习算法入门:从K-means到神经网络
【6月更文挑战第26天】机器学习入门:从K-means到神经网络。文章涵盖了K-means聚类、逻辑回归、决策树和神经网络的基础原理及应用场景。K-means用于数据分组,逻辑回归适用于二分类,决策树通过特征划分做决策,神经网络则在复杂任务如图像和语言处理中大显身手。是初学者的算法导览。
|
5天前
|
机器学习/深度学习 人工智能 Dart
AI - 机器学习GBDT算法
梯度提升决策树(Gradient Boosting Decision Tree),是一种集成学习的算法,它通过构建多个决策树来逐步修正之前模型的错误,从而提升模型整体的预测性能。
|
7天前
|
机器学习/深度学习 算法 数据挖掘
机器学习与智能优化——利用简单遗传算法优化FCM
机器学习与智能优化——利用简单遗传算法优化FCM
24 5
|
8天前
|
机器学习/深度学习 人工智能 算法
【机器学习】RLHF:在线方法与离线算法在大模型语言模型校准中的博弈
【机器学习】RLHF:在线方法与离线算法在大模型语言模型校准中的博弈
217 6

热门文章

最新文章