《机器学习Python实践》

    技术2022-07-10  84

    文章目录

    前言CH1 初识机器学习CH2 Python机器学习的生态圈CH3 第一个机器学习项目CH4 Python和SciPy速成CH5 数据导入CH6 数据理解CH7 数据可视化CH8 数据预处理CH9 数据特征选定CH10 评估算法CH11 算法评估矩阵CH12 审查分类算法CH13 审查回归算法CH14 算法比较CH15 自动流程CH16 集成算法CH17 算法调参CH18 持久化加载模型CH19 预测模型项目模板CH20 回归项目实例CH21 二分类实例CH22 文本分类实例


    前言

    中国工信出版集团、电子工业出版社 魏贞原 源代码下载:https://www.broadview.com.cn/33110 https://github.com/weizy1981/MachineLearning


    CH1 初识机器学习

    在进行机器学习的时候,要避免以下误区:

    必须非常熟悉Python的语法和擅长Python的编程;非常深入的学习和理解在scikit-learn中使用的机器学习理论和算法;避免或很少参与项目;

    进行机器学习项目的步骤:

    定义问题:结合业务场景,提炼关键指标;数据理解:通过描述性统计、数据可视化来分析数据集;数据准备:对数据进行预处理,用于后续构建模型;评估算法:将数据分离为两部分,一部分用于训练模型,另一部分用于评估算法模型;优化模型:通过调参、集成算法提升预测结果的准确度;结果部署:将算法模型上线,用于优化业务指标;

    CH2 Python机器学习的生态圈

    略。


    CH3 第一个机器学习项目

    demo:鸢尾花分类。数据集是含鸢尾花的三个亚属的分类信息。通过机器学习生成一个模型,自动将新数据分类到这三个亚属中的某一个。这是一个非常简单的数据集,非常适合于初学者。

    数据集下载路径:https://archive.ics.uci.edu/ml/datasets/Iris

    # 导入类库 from pandas import read_csv # 导入csv数据集 from pandas.plotting import scatter_matrix from matplotlib import pyplot # 二维作图 from sklearn.model_selection import train_test_split from sklearn.model_selection import KFold from sklearn.model_selection import cross_val_score from sklearn.metrics import classification_report from sklearn.metrics import confusion_matrix from sklearn.metrics import accuracy_score from sklearn.linear_model import LogisticRegression # 逻辑回归 from sklearn.tree import DecisionTreeClassifier # 决策树 from sklearn.discriminant_analysis import LinearDiscriminantAnalysis # 线性判别分析 from sklearn.neighbors import KNeighborsClassifier # K近邻 from sklearn.naive_bayes import GaussianNB # 朴素贝叶斯 from sklearn.svm import SVC # 支持向量机 # 鸢尾花数据集 https://archive.ics.uci.edu/ml/datasets/Iris # 导入数据 filename = 'iris.data_csv' names = ['separ-length0', 'separ-width', 'petal-length', 'petal-width', 'class'] # 为每个数据特征指定名称 dataset = read_csv(filename, names=names) # 探索数据,增加对数据的理解,以便于选择合适的算法 print('数据维度:行 %s, 列 %s' % dataset.shape) # 查看数据集的行数、列数 print(dataset.head(10)) # 查看数据集前10行记录 print(dataset.describe()) # 查看数据集的统计描述信息,行数、中位数、最大值、最小值、均值、四分位数 print(dataset.groupby('class').size()) # 查看分类分布情况 # 探索数据,数据可视化 dataset.plot(kind='box', subplots=True, layout=(2, 2), sharex=False, sharey=False) # 箱线图 pyplot.show() dataset.hist() # 直方图 pyplot.show() scatter_matrix(dataset) # 散点矩阵图 pyplot.show() # 评估算法,通过不同的算法来创建模型,并评估其准确性,以便于找到最合适的算法 # 分离出评估数据集 array = dataset.values X = array[:, 0:4] # 前4列数据 Y = array[:, 4] # 第5列数据 validation_size = 0.2 seed = 7 # 其中,X_train和Y_train用于训练算法模型,X_validation和Y_validation用于验证评估模型 X_train, X_validation, Y_train, Y_validation = train_test_split(X, Y, test_size=validation_size, random_state=seed) # K折交叉验证。将训练数据集分为K份,其中K-1份用于训练模型,1份用于评估模型 # 算法审查 models = {} models['LR'] = LogisticRegression() # 线性回归 LR models['LDA'] = LinearDiscriminantAnalysis() # 线性判别分析 LDA models['KNN'] = KNeighborsClassifier() # K近邻 KNN models['CART'] = DecisionTreeClassifier() # 分类与回归树 CART models['NB'] = GaussianNB() # 贝叶斯分类器 NB models['SVM'] = SVC() # 支持向量机 SVM # 评估算法 results = [] for key in models: kfold = KFold(n_splits=10, random_state=seed) cv_results = cross_val_score(models[key], X_train, Y_train, cv=kfold, scoring='accuracy') results.append(cv_results) print('%s: %f (%f)' % (key, cv_results.mean(), cv_results.std())) # 选择最优模型,结果显示SVM算法具有最高的精确度得分 # 箱线图比较算法 fig = pyplot.figure() fig.suptitle('Algorithm Comparison') ax = fig.add_subplot(111) pyplot.boxplot(results) ax.set_xticklabels(models.keys()) pyplot.show() # 实施预测,使用评估数据集评估算法 svm = SVC() svm.fit(X=X_train, y=Y_train) predictions = svm.predict(X_validation) print(accuracy_score(Y_validation, predictions)) print(confusion_matrix(Y_validation, predictions)) print(classification_report(Y_validation, predictions))

    CH4 Python和SciPy速成

    略。


    CH5 数据导入

    # Python导入csv数据的方法demo ############################################################################ # 方法1 from csv import reader import numpy as np filename = 'pima_data.csv' with open(filename, 'rt') as raw_data: readers = reader(raw_data, delimiter=',') x = list(readers) data = np.array(x).astype('float') print(data.shape) ############################################################################ # 方法2 from numpy import loadtxt filename = 'pima_data.csv' with open(filename, 'rt') as raw_data: data = loadtxt(raw_data, delimiter=',') print(data.shape) ############################################################################ # 方法3,推荐 from pandas import read_csv filename = 'pima_data.csv' names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class'] data = read_csv(filename, names=names) # 将csv转化为DataFrame,便于进行后续的分析处理 print(data.shape)

    CH6 数据理解

    理解数据的特征和分布,有助于对数据进行处理,从而训练出更优化的模型。可以通过以下7种方式来理解数据:

    from pandas import read_csv filename = 'pima_data.csv' names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class'] data = read_csv(filename, names=names) print(data.head(10)) # 显示数据的前10行 print(data.shape) # 显示数据的行和列 print(data.dtypes) # 显示数据的每个字段的类型 print(data.describe()) # 显示数据的统计性描述信息 print(data.groupby('class').size()) # 显示数据的分组分布 print(data.corr(method='pearson')) # 显示数据的皮尔逊相关系数 print(data.skew()) # 显示数据所有属性的高斯分布偏离情况

    什么样的数据集才是好的训练数据集?

    特征数量要适中。特征太多,会导致算法性能低下;行数要适中。行数太多会导致训练时间太长,行数太少会导致训练不够充分;每个特征的取值分布要均匀、平衡;特征之间的相关性要较差,趋近于0最好;数据分布最好遵循高斯分布;

    CH7 数据可视化

    数据可视化是理解数据最快、最有效的方式。

    from pandas import read_csv import matplotlib.pyplot as plt import numpy as np filename = 'pima_data.csv' names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class'] data = read_csv(filename, names=names) data.hist() # 直方图 data.plot(kind='density', subplots=True, layout=(3, 3), sharex=False) # 密度图 data.plot(kind='box', subplots=True, layout=(3, 3), sharex=False) # 箱线图 correlations = data.corr() # 获取相关性 fig = plt.figure() ax = fig.add_subplot(111) # 做出底图 cax = ax.matshow(correlations, vmin=-1, vmax=1) # 将相关性作图 fig.colorbar(cax) # 设置右侧色柱 ticks = np.arange(0, 9, 1) ax.set_xticks(ticks) # 设置x轴标签 ax.set_yticks(ticks) ax.set_xticklabels(names) # 设置x轴注释 ax.set_yticklabels(names) scatter_matrix(data) # 散点矩阵图 plt.show()

    CH8 数据预处理

    调整数据尺度。正态化。标准化。二值化。

    CH9 数据特征选定

    数据和特征决定了模型的上限,而模型和算法只是逼近这个上限而已。

    单变量特征选定。递归特征消除。主要成分分析。特征的重要性。

    CH10 评估算法

    要知道算法模型对未知数据的预测能力,最好的评估办法是利用已经明确知道结果的数据,运行生成的算法模型以进行验证。

    分离训练数据集和评估数据集K折交叉验证分离弃一交叉验证分离重复随机分离评估数据集与训练数据集

    CH11 算法评估矩阵

    计算算法的评估矩阵,以评估机器学习的算法模型。

    算法评估矩阵回归算法矩阵

    CH12 审查分类算法

    算法审查是选择合适的机器学习算法的主要方法之一。

    尝试多种代表性算法尝试多种机器学习的算法尝试多种模型

    CH13 审查回归算法


    CH14 算法比较

    比较不同算法的准确度,选择合适的算法,在处理机器学习的问题时,是非常重要的。本章提供了一种对多种算法进行分析比较的方法。


    CH15 自动流程

    有一些标准的流程,可以实现对机器学习问题的自动化处理。


    CH16 集成算法

    将多种机器学习算法组合在一起,从而提高算法精确度的方法,被称之为集成学习。

    装袋算法Bagging:提升算法Boosting:投票算法Voting:

    CH17 算法调参

    机器学习的模型都是参数化的,可以通过调参来提高模型的准确度。

    网格搜索优化参数:随机搜索优化参数:

    CH18 持久化加载模型

    在实际生产中,找到了能够生成高准确度模型的算法之后,需要将生成的模型序列化,并将其发布到生产环境当中。

    pickle:joblib:

    CH19 预测模型项目模板

    应对新的机器学习项目时,新建一个Python文件,并将这个模板粘贴进去,再按照前面章节中介绍的方法将其填充到每一个步骤中。

    # Python机器学习项目的模板 # 1. 定义问题 # a) 导入类库 # b) 导入数据集 # 2. 理解数据 # a) 描述性统计 # b) 数据可视化 # 3. 数据准备 # a) 数据清洗 # b) 特征选择 # c) 数据转换 # 4. 评估算法 # a) 分离数据集 # b) 定义模型评估标准 # c) 算法审查 # d) 算法比较 # 5. 优化模型 # a) 算法调参 # b) 集成算法 # 6. 结果部署 # a) 预测评估数据集 # b) 利用整个数据集生成模型 # c) 序列化模型

    CH20 回归项目实例


    CH21 二分类实例


    CH22 文本分类实例

    Processed: 0.022, SQL: 9