Python目前是机器学习领域增长最快速的编程语言之一。

该教程共分为11小节。在这个教程里,你将学会:

  • 如何处理数据集,并构建精确的预测模型
  • 使用Python完成真实的机器学习项目

这是一个非常简洁且实用的教程,希望你能收藏,以备后面复习!

接下来进入正题~

这个微课程适合谁学习?

开始之前,要搞清楚该教程是否属于你的菜。

如果你不符合以下几点,也没关系,只要花点额外时间搞清楚知识盲点就能跟上。

  • 熟悉python语法,会写简单脚本。这意味着你在此之前接触过python,或者懂得其它编程语言,类C语言都是可以的。
  • 了解机器学习的基本概念。基本概念包括知道什么是监督学习、非监督学习、分类和预测的区别、交叉验证、简单算法。不要被这些吓到了,并非要求你是个机器学习专家,只是你要知道如何查找并学习使用。

所以这个教程既不是python入门,也不是机器学习入门。而是引导你从一个机器学习初级开发者,到能够基于python生态开展机器学习项目的专业开发者。

教程目录

该教程分为12节

第1节:下载并安装python及Scipy生态

第2节:熟悉使用python、numpy、matplotlib和pandas

第3节:加载CSV数据

第4节:对数据进行描述性统计分析

第5节:对数据进行可视化分析

第6节:数据预处理

第7节:通过重采样进行算法评估

第8节:模型比较和选择

第9节:通过算法调整提高模型精度

第10节:通过集合预测提高模型精度

第11节:完善并保存模型

希望大家在学习的过程中能够自主寻找解决困难的办法,网上资源很丰富,这也是自我提升很关键的一步。当然也可以在评论区留言哦!

第1节:下载并安装python及Scipy生态

这一节内容比较简单,你需要下载python3.6并安装在你的系统里,我用的win10系统。

接着要安装Scipy生态和scikit-learn库,这里推荐使用pip安装。

简单介绍一下Scipy,Scipy是一个基于python的数学、科学和工程软件开源生态系统。包含一些核心库:numpy、scipy、pandas、matplotlib、ipython、sympy

如果你不想这么麻烦,那么也可以使用傻瓜式一条龙安装-Anaconda,这里面预装了python及一百多个库。

安装好后,就可以在命令行键入“python”,就可以运行python了。

看一下python及各个库的版本:

# Python version
import sys
print('Python: {}'.format(sys.version))
# scipy
import scipy
print('scipy: {}'.format(scipy.__version__))
# numpy
import numpy
print('numpy: {}'.format(numpy.__version__))
# matplotlib
import matplotlib
print('matplotlib: {}'.format(matplotlib.__version__))
# pandas
import pandas
print('pandas: {}'.format(pandas.__version__))
# scikit-learn
import sklearn
print('sklearn: {}'.format(sklearn.__version__))

  

如果没有报错,那么安装环节就成功了。

第2节:熟悉使用python、numpy、matplotlib和pandas

第一步,你要能够读写python脚本。

python是一门区分大小写、使用#注释、用tab缩进表示代码块的语言。

这一小节目的在于练习python语法,以及在python环境下如何使用重要的Scipy生态工具。

包括:

  • 使用python列表
  • 使用numpy array数组操作
  • 使用matplotlib简单绘图
  • 使用pandas两种数据结构Series和DataFrame
# 导入各个库
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt myarray = np.array([[1, 2, 3], [4, 5, 6]]) # 使用numpy数组
rownames = ['a', 'b']
colnames = ['one', 'two', 'three'] # 使用列表操作
mydataframe = pd.DataFrame(myarray, index=rownames, columns=colnames) #生成DataFrame
print(mydataframe) mp = plt.plot(myarray) # 使用matplotlib绘制简单图表
plt.show() # 显示图像

  

第3节:加载CSV数据

机器学习算法需要有数据,这节讲解如何在python中正确地加载CSV数据集

有几种常用的方法供参考:

  • 使用标准库中CSV的CSV.reader()加载
  • 使用第三方库numpy中的numpy.loadtxt()加载
  • 使用第三方库pandas中的pandas.read_csv()加载

这里使用pandas来加载数据集,数据集使用网上数据Pima Indians onset of diabetes,你也可以使用本地数据练习

# Load CSV using Pandas from URL
import pandas # 导入pandas库
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = pandas.read_csv(url, names=names) # 读取数据
print(data.head(5)) # 打印数据集前5行

  

第4节:对数据进行描述性统计分析

导入数据后,第一步要做的是理解数据。

对数据理解的越透彻,建立的模型也会越精确。这里就要提到描述性统计分析,主要包括数据的频数分析、集中趋势分析、离散程度分析、分布以及一些基本的统计图形。

有以下几点操作:

  • 使用head()和tail()函数查看数据样本
  • 使用shape属性查看数据规格
  • 使用dtypes属性查看每个变量的数据类型
  • 使用describe()函数查看数据描述
  • 使用corr()函数计算各个变量之间的相关性

依然使用pima数据集,接上一节读取数据后:

# Load CSV using Pandas from URL
import pandas # 导入pandas库
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = pandas.read_csv(url, names=names) # 读取数据 head_5 = data.head(5) # 查看前5行
print(head_5)
tail_5 = data.tail(5) # 查看后5行
print(tail_5)
shape_ = data.shape # 查看数据规格,即多少行多少列
print(shape)
dtypes_ = data.dtypes # 查看每个变量的数据类型
print(dtypes_)
corr_ = data.corr() # 查看各个变量之间的相关性
print(corr_)
description = data.describe() # 查看数据描述
print(description)

  

数据描述结果

第5节:对数据进行可视化分析

仅仅是做描述性统计无法直观地理解数据,python提供了丰富的可视化工具,帮助展示数据。这一小节就是对上节数据集进行可视化描述,让你一目了然。

有以下几点操作:

  • 使用hist()方法创建每个变量的直方图
  • 使用plot(kind='box')方法创建每个变量的箱图
  • 使用plotting.scatter_matrix()方法创建矩阵散点图
# Load CSV using Pandas from URL
import pandas # 导入pandas库
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = pandas.read_csv(url, names=names) # 读取数据 import matplotlib.pyplot as plt # 导入绘图模块
data.hist() # 直方图
data.plot(kind='box') # 箱图
pd.plotting.scatter_matrix(data) # 矩阵散点图
plt.show() # 展示图表

  

直方图

箱图

矩阵散点图

第6节:数据预处理

在将数据用作机器学习模型之前,需要对数据的内容和结构做适当的调整,才能更好的适应模型。这就是数据预处理工作。

有一些方法技术可以用于数据预处理,比如:

  • 数据标准化。数据标准化是将数据按比例缩放,使之落入一个小的特定区间。有利于提升模型的收敛速度和模型精度。比较典型的标准化方法有min-max标准化、z-score 标准化、归一化等
  • 数据二值化。特征二值化是对数值特征进行阈值处理以获得布尔值的过程,根据阈值将数据二值化(将特征值设置为0或1)大于阈值的值映射到1,而小于或等于阈值的值映射到0.默认阈值为0时,只有正值映射到1。方法有Binarizing等。
  • 分类数据连续化。通常,特征不是作为连续值给出的,而是文本字符串或者数字编码的类别。比如性别数据通常是["男", "女"]这样的数据, 可以编码成[1,2], 但是这种数据通常不是可以直接进入机器学习模型的。将这种分类数据进行连续化的方法最著名的就是one-hot-encoding
  • 估算缺失的值。由于各种原因,许多真实世界的数据集包含缺失值,通常编码为空白,NaN或其他占位符。然而,这样的数据集与scikit-learn估计器不兼容,它们假定数组中的所有值都是数值的,并且都具有并保持含义。使用不完整数据集的基本策略是放弃包含缺失值的整个行和/或列。然而,这是以丢失可能有价值的数据为代价的(尽管不完整)。更好的策略是推算缺失值,即从数据的已知部分推断它们。

上面提到的数据预处理技术都可以通过scikit-learn提供的方法实现。

简单介绍下scikit-learn,scikit-learn拥有可以用于监督和无监督学习的方法,一般来说监督学习使用的更多。sklearn中的大部分函数可以归为估计器(Estimator)和转化器(Transformer)两类。

估计器(Estimator)其实就是模型,它用于对数据的预测或回归。基本上估计器都会有以下几个方法:

  • fit(x,y):传入数据以及标签即可训练模型,训练的时间和参数设置,数据集大小以及数据本身的特点有关
  • score(x,y)用于对模型的正确率进行评分(范围0-1)。但由于对在不同的问题下,评判模型优劣的的标准不限于简单的正确率,可能还包括召回率或者是查准率等其他的指标,特别是对于类别失衡的样本,准确率并不能很好的评估模型的优劣,因此在对模型进行评估时,不要轻易的被score的得分蒙蔽。
  • predict(x)用于对数据的预测,它接受输入,并输出预测标签,输出的格式为numpy数组。我们通常使用这个方法返回测试的结果,再将这个结果用于评估模型。

转化器(Transformer)用于对数据的处理,例如标准化、降维以及特征选择等等。同与估计器的使用方法类似:

  • fit(x,y):该方法接受输入和标签,计算出数据变换的方式。
  • transform(x):根据已经计算出的变换方式,返回对输入数据x变换后的结果(不改变x)
  • fit_transform(x,y) :该方法在计算出数据变换方式之后对输入x就地转换。

列如,我要对数据集进行标准化处理,用到scikit-learn库中的StandardScaler()函数,那么先要用该函数的fit()方法,计算出数据转换的方式,再用transform()方法根据已经计算出的变换方式,返回对输入数据x标准化变换后的结果。

# 标准化数据 (0 mean, 1 stdev)
from sklearn.preprocessing import StandardScaler # 导入标准化函数
import pandas
import numpy
# 读取数据
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = pandas.read_csv(url, names=names)
array = dataframe.values
# 将数据分割为输入和响应两部分,即X和Y
X = array[:,0:8]
Y = array[:,8]
# 对数据进行标准化处理
scaler = StandardScaler().fit(X)
rescaledX = scaler.transform(X)
# summarize transformed data
numpy.set_printoptions(precision=3)
print(rescaledX[0:5,:])

  

第7节:通过重采样方法进行算法评估

用于训练模型的数据集称为训练集,但如何评估训练出来的模型的准确度呢?显然不能再用训练集,否则既是裁判又是运动员。

所以,需要一个新的数据集用于验证模型的准确度,新数据的获取就需要用到重采样方法了。重采样可以将数据集切分为训练集和验证集两个数据,前者用于训练模型,后者用于评估模型。

验证数据取自训练数据,但不参与训练,这样可以相对客观的评估模型对于训练集之外数据的匹配程度。

模型在验证数据中的评估常用的是交叉验证,又称循环验证。它将原始数据分成K组(K-Fold),将每个子集数据分别做一次验证集,其余的K-1组子集数据作为训练集,这样会得到K个模型。这K个模型分别在验证集中评估结果,最后的误差MSE(Mean Squared Error)加和平均就得到交叉验证误差。

交叉验证有效利用了有限的数据,并且评估结果能够尽可能接近模型在测试集上的表现,可以做为模型优化的指标使用。

最后要通过某种评估规则计算出模型准确度的分数,这里提供了cross_val_score(scoring='')函数评估交叉验证结果,其中参数scoring代表评估规则。评估规则有很多种,针对回归和分类,有不同的选择,比如:

这一节要做的是:

  • 将数据集切分为训练集和验证集
  • 使用k折交叉验证估算算法的准确性
  • 使用cross_val_score()函数评估交叉验证结果,输出k折交叉验证准确度评分
# 使用交叉验证评估模型
from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression
# 加载数据
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(url, names=names)
array = dataframe.values
X = array[:,0:8]
Y = array[:,8]
# 使用k折交叉验证,n-split就是K值,shuffle指是否对数据洗牌,random_state为随机种子
kfold = KFold(n_splits=10,shuffle = True, random_state=7)
# 使用逻辑回归模型,这是一个分类算法
model = LogisticRegression(solver='liblinear')
# 交叉验证,cv代表交叉验证生成器,这里是k折,scoring代表评估规则,输出模型对于10个验证数据集准确度的评估结果
results = cross_val_score(model, X, Y, cv=kfold,scoring='neg_mean_squared_error')
# 打印这10个结果的平均值和标准差
print("Accuracy: %.3f%% (%.3f%%)") % (results.mean()*100.0, results.std()*100.0)

  

未完待续

参考:machinelearningmastery

如果大家想要学习更多的python数据分析知识,请关注我的公众号:pydatas

Python机器学习·微教程的更多相关文章

  1. Python机器学习基础教程-第2章-监督学习之决策树集成

    前言 本系列教程基本就是摘抄<Python机器学习基础教程>中的例子内容. 为了便于跟踪和学习,本系列教程在Github上提供了jupyter notebook 版本: Github仓库: ...

  2. Python机器学习基础教程-第2章-监督学习之决策树

    前言 本系列教程基本就是摘抄<Python机器学习基础教程>中的例子内容. 为了便于跟踪和学习,本系列教程在Github上提供了jupyter notebook 版本: Github仓库: ...

  3. Python机器学习基础教程-第2章-监督学习之线性模型

    前言 本系列教程基本就是摘抄<Python机器学习基础教程>中的例子内容. 为了便于跟踪和学习,本系列教程在Github上提供了jupyter notebook 版本: Github仓库: ...

  4. Python机器学习基础教程-第2章-监督学习之K近邻

    前言 本系列教程基本就是摘抄<Python机器学习基础教程>中的例子内容. 为了便于跟踪和学习,本系列教程在Github上提供了jupyter notebook 版本: Github仓库: ...

  5. Python机器学习基础教程

    介绍 本系列教程基本就是搬运<Python机器学习基础教程>里面的实例. Github仓库 使用 jupyternote book 是一个很好的快速构建代码的选择,本系列教程都能在我的Gi ...

  6. Python机器学习基础教程-第1章-鸢尾花的例子KNN

    前言 本系列教程基本就是摘抄<Python机器学习基础教程>中的例子内容. 为了便于跟踪和学习,本系列教程在Github上提供了jupyter notebook 版本: Github仓库: ...

  7. python 机器学习基础教程——第一章,引言

    https://www.cnblogs.com/HolyShine/p/10819831.html # from sklearn.datasets import load_iris import nu ...

  8. 画出决策边界线--plot_2d_separator.py源代码【来自python机器学习基础教程】

    import numpy as np import matplotlib.pyplot as plt from .plot_helpers import cm2, cm3, discrete_scat ...

  9. Python 机器学习库 NumPy 教程

    0 Numpy简单介绍 Numpy是Python的一个科学计算的库,提供了矩阵运算的功能,其一般与Scipy.matplotlib一起使用.其实,list已经提供了类似于矩阵的表示形式,不过numpy ...

随机推荐

  1. 大白话5分钟带你走进人工智能-第31节集成学习之最通俗理解GBDT原理和过程

    目录 1.前述 2.向量空间的梯度下降: 3.函数空间的梯度下降: 4.梯度下降的流程: 5.在向量空间的梯度下降和在函数空间的梯度下降有什么区别呢? 6.我们看下GBDT的流程图解: 7.我们看一个 ...

  2. 【原创】Docker 搭建Maven私服nexus 3.17初始密码登录不上问题/admin登陆不上问题

    [原创-转载请说明出处] 博主最近在虚拟机中搭建Maven私服,遇到了一个关键问题就是nexus 3.17版本后初始密码不是admin/admin123. 对于nexus不熟悉的我弄了很长时间!!!心 ...

  3. GIT \ SVN 版本管理 git + gitHub

    场景1   想删除一个段落,又怕将来想恢复找不回来怎么办?有办法,先把当前文件"另存为--"一个新的Word文件,再接着改,改到一定程度,再"另存为--"一个新 ...

  4. JAVA 实现 GET、POST、PUT、DELETE HTTP请求

    1.get 2.put 3.post 4.delete

  5. 安装Eclipse for MAC 苹果版

    1. 安装Eclipse for MAC 苹果版 2. Thank you for downloading Eclipse If the download doesn't start in a few ...

  6. java判断年份是否为闰年

    在t1.jsp 中,设置一个表单,可以输入年份,提交到另外一个action进行计算,如果算出来是闰年,那么就跳转到a1.jsp(显示闰年),如果是平年就跳转到a2.jsp(显示平年). 要求:需要把计 ...

  7. JAVA十大经典排序算法最强总结(含JAVA代码实现)

    十大经典排序算法最强总结(含JAVA代码实现)   最近几天在研究排序算法,看了很多博客,发现网上有的文章中对排序算法解释的并不是很透彻,而且有很多代码都是错误的,例如有的文章中在“桶排序”算法中对每 ...

  8. [POI2008]枪战Maf题解

    问题 C: [POI2008]枪战Maf 时间限制: 1 Sec  内存限制: 256 MB 题目描述 有n个人,每个人手里有一把手枪.一开始所有人都选定一个人瞄准(有可能瞄准自己).然后他们按某个顺 ...

  9. 【拓扑排序】威虎山上的分配-C++

    威虎山上的分配 描述 每年过年的时候,座山雕都会给兄弟们分银子,分银子之前,座山雕允许大伙儿发表意见,因为要是没法满足所有人的意见,指不定谁要搞出什么大新闻.不过每个人在提意见的时候只能说:" ...

  10. c++小游戏——拯救公主

    #include<stdio.h> #include<ctime> #include<time.h> //suiji #include<windows.h&g ...