《机器学习Python实践》

文章目录

  • 前言
  • 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 初识机器学习

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

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

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

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

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 文本分类实例

你可能感兴趣的:(《机器学习Python实践》)