语言与工具介绍
机器学习为何选择python? Python已经成为许多数据科学应用的通用语言。它既有通用编程语言的强大功能,也有特定领域脚本语言(比如MATLAB或R)的易用性。 Python有用于数据加载、可视化、统计、自然语言处理、图像处理等各种功能的库。这个大型工具箱为数据科学家提供了大量的通用功能和专用功能。 使用Python的主要优点之一,就是利用终端能够直接与代码进行交互;机器学习和数据分析本质上都是迭代过程,由数据驱动分析。 这些过程必须要有快速迭代和易于交互的工具。作为通用编程语言,Python还可以用来创建复杂的图形用户界面(graphical user interface,GUI)和Web服务,也可以集成到现有系统中。 目前Python主要有两大版本广为使用:Python 2(更确切地说是Python 2.7)和Python 3. 在学习机器学习算法时要记住安装python3, 不然后面会经常糟心。
机器学习算法库: scikit-learn是一个开源项目,可以免费使用, 通过源代码来查看其背后的原理。它包含许多目前最先进的机器学习算法,也可以与其他大量Python科学计算工具一起使用。中文社区链接:scikit-learn.org.cn/lists/2.htm… scikit-learn是基于NumPy和SciPy科学计算库的。除了NumPy和SciPy,我们还会用到pandas和matplotlib。 安装scikit-learn: 如果已经安装了python, 则建议使用pip安装如下包:pip install numpy scipy matplotlib scikit-learn pandas 如果是全新环境,可以考虑Anaconda,它包含180+的科学包及其依赖项的发行版本。其包含的科学包包括:conda, numpy, scipy, ipython notebook等。所占用的空间可能要大一点。
什么是Numpy? NumPy是Python科学计算的基础包之一。它的功能包括多维数组、高级数学函数(比如线性代数运算和傅里叶变换),以及伪随机数生成器。 在scikit-learn中,NumPy数组是基本数据结构。scikit-learn接受NumPy数组格式的数据。你用到的所有数据都必须转换成NumPy数组。NumPy的核心功能是ndarray类,即多维(n维)数组。 数组的所有元素必须是同一类型。
什么是Scipy? SciPy是Python中用于科学计算的函数集合。它具有线性代数高级程序、数学函数优化、信号处理、特殊数学函数和统计分布等多项功能。scikit-learn利用SciPy中的函数集合来实现算法。
什么是matplotlib? matplotlib是Python主要的科学绘图库,其功能为生成可发布的可视化内容,如折线图、直方图、散点图等。将数据及各种分析可视化,方便理解。
什么是pandas? pandas是用于处理和分析数据的Python库。它基于一种叫作DataFrame的数据结构,这种数据结构模仿了R语言【一种自由软件编程语言与操作环境,主要用于统计分析、绘图、数据挖掘】中的DataFrame。 简单来说,一个pandas DataFrame是一张表格,类似于Excel表格。pandas中包含大量用于修改表格和操作表格的方法,尤其是可以像SQL一样对表格进行查询和连接。 NumPy要求数组中的所有元素类型必须完全相同,而pandas不是这样,每一列数据的类型可以互不相同(比如整型、日期、浮点数和字符串)。 pandas的另一个强大之处在于,它可以从许多文件格式和数据库中提取数据,如SQL、Excel文件和逗号分隔值(CSV)文件。
什么是mglearn? mglearn是一个Python库,用于辅助机器学习和数据分析的工具包。mglearn的特点: 易于使用:mglearn提供了易于理解和使用的函数和工具,使得机器学习的概念和算法更加直观和可视化。 示例丰富:mglearn中包含了大量的示例代码,涵盖了各种常见的机器学习任务,如分类、回归、聚类等。这些示例代码可以帮助用户快速上手和理解机器学习的应用。 可视化工具:mglearn提供了一些可视化工具,如绘制决策边界、绘制特征重要性等,帮助用户更好地理解机器学习算法的工作原理。 与scikit-learn的兼容性:mglearn与scikit-learn库完美兼容,可以与scikit-learn的函数和模型进行无缝集成,扩展了scikit-learn的功能。
pandas
Pandas最重要的两个数据结构:Series、DataFrame. Series是任何数据类型(integers、strings、floating、objects、etc)的一维数组.数组里的数据类型是一致的,由索引(左边)和数据(右边)组成。
通过pandas的Series方法创建如pandas.Series(data=Node,index=None,dtype=None),传入数据的data可以为list,ndarray,dict.
通过list,ndarray时如果没有指定索引,则会自动生成0到N-1的整数型索引。如果指定索引,则索引的size必须与data的size相同。
通过dict创建时,如果没有指定索引,index默认为dict中的key值。如果在创建时重新传入新的index,index与key相交则是字典的value, 如果index不在字典的key中则为NaN, 如果字典的key不在index中,则value被删除。
import pandas as pd
import numpy as np
if __name__ == "__main__":
# 通过ndarray创建Series
series = pd.Series(np.random.randn(4), index=["aa", "bb", "cc", "dd"])
print(series)
# 通过list创建Series
series = pd.Series([0.25, 0.3, 0.4, 1.25], index=["a", "b", "c", "d"], dtype='float')
print(series)
# 通过dict创建Series
data1 = {'a': 0.0, 'b': 1.0, 'c': 2.0}
series = pd.Series(data1)
print(series)
series = pd.Series(data1, index=['m', 'a', 'n', 'c'])
print(series)
运行结果如下:
aa 0.066311
bb 0.264589
cc 0.617448
dd 0.697578
dtype: float64
a 0.25
b 0.30
c 0.40
d 1.25
dtype: float64
a 0.0
b 1.0
c 2.0
dtype: float64
m NaN
a 0.0
n NaN
c 2.0
dtype: float64
DataFrame是二维标记的数据结构,可以看成一张数据表格或者SQL数据库中的一个表,支持多种数据类型来创建,例如dict,list,ndarray,series,dataFrame. DataFrame中的同列数据类型一致,不同列的数据类型可以不一致。
DataFarme的创建: