python机器学习入门到精通(一)

机器学习概论

机器学习,顾名思义,它是人工智能、统计学、计算机科学交叉的研究领域,也被称作预测分析或统计学习。近年来,由于人工智能的火爆,机器学习方法已经应用到日常生活的方方面面。贴近我们生活的就有,系统自动推荐用户的喜好,买什么物品,点什么食物,浏览新闻时,给你推送什么类型的文章,甚至于我们登录淘宝购买物品,微博观看别人的微博时,这些每一部分都可能包含多种机器学习模型。当然,机器学习也在科研方面也有建树,比如DNA分析,天文学的研究,微观粒子等。同时,要想学好机器学习,数学的基础也是必须的。
机器学算法是将决策过程自动化的算法,而这些决策是从已知示例中泛化得出来的,而这种方法被称作监督学习(supervised learning)。 用户将成对的输入和预期输出提供给算法,然后算法会找到一种方法,根据给定输入给出预期输出。从输入/输出对中进行学习的机器学习算法叫作监督学习算法,因为每个用于算法学习的样例都对应一个预期输出,就像老师教导学生在督算着算法。在生活中,监督机器学习任务大多应用于:

  • 识别信封上手写的邮政编码, 输入扫描的手写数字,预期输出是邮政编码中的实际数字。想要创建用于构建机器学习模型的数据集,需要收集许多信封,然后可以自己阅读邮政编码,将数字保存为预期输出。
  • 基于医学影像判断肿瘤是否为良性, 这里的输入是影像,输出是肿瘤是否为良性。创建用于构建模型的数据集,需要一个医学影像数据库,需要查看所有影像,然后判断哪些肿瘤是良性和不是良性的。
  • 检测信用卡交易中的诈骗行为, 输入是信用卡交易记录,输出是该交易记录是否可能为诈骗,收集数据集意味着需要保存所有的交易,并记录用户是否上报过任何诈骗交易。
  • 确定一系列博客文章的主题,拥有许多文本数据,对其进行汇总,并找到其中共同的主题。
  • 将客户分成具有相似偏好的群组,给定一组客户记录, 需要找出哪些客户比较相似,并判断能否根据相似偏好对这些客户进行分组。
  • 检测网站的异常访问模式,识别网站的滥用或bug,找到异常的访问模式。

scikit-learn 是一个开源项目,而scikit-learn依赖于另外两个python包:NumPy和SciPy, matplotlib、IPython和 Jupyter Notebook可以帮助我们进行绘图和进行交互式开发。
NumPy是python科学计算的基础包之一,NumPy数组是基本数据机构。它的功能包括多维数组、高级数学函数以及伪随机数生成器。Numpy的核心功能是ndarray类,即多维数组。数组的所有元素必须是同一类型,如:

import numpy as np
x = np.array([[1,2,3],[4,5,6]])
print("x:\n{}".format(x))

输出:

x:[[1 2 3]
    [4 5 6]]

SciPy是python中用于科学计算的函数集合。它具有线性代数高级程序、数学函数优化、信号处理、特殊数学函数和统计分布等多项功能。SciPy中最重要的是scipy.sparse,它可以给出稀疏矩阵,而稀疏矩阵是scikit-learn中数据的另一种表示方法。如果想保存一个大部分元素都是0的二维数组,就可以使用稀疏矩阵:

from scipy import sparse
# 创建一个二维NumPy数组,对角线为1,其余都为0
eye = np.eye(4)
print("NumPy array:\n{}".format(eye))
输出:
NumPy array:
[[1. 0. 0. 0.]
 [0. 1. 0. 0.]
 [0. 0. 1. 0.]
 [0. 0. 0. 1.]]
# 将NumPy数组转换为CSR格式的SciPy稀疏矩阵
# 只保存非零元素
sparse_matrix = sparse.csr_matrix(eye)
print("\nSciPy sparse CSR matrix:\n{}".format(sparse_matrix))
输出:
SciPy sparse CSR matrix:
    (0,0)  1.0
    (1,1)  1.0
    (2,2)  1.0
    (3,3)  1.0

通常来讲,创建稀疏数据的稠密表示是不可能的(因为太耗费内存),所以我们需要直接创建其稀疏表示。我们再用COO格式创建同一稀疏矩阵:

data = np.ones(4)
row_indices = np.arange(4)
col_indices = np.arrange(4)
eye_coo = sparse.coo_matrix((data, (row_indices, col_indices)))
print("COO representation:\n{}".format(eye_coo))

输出:
COO representation:
    (0,0)  1.0
    (1,1)  1.0
    (2,2)  1.0
    (3,3)  1.0

matplotlib是python主要的科学会图库,功能为生成可发布的可视化内容,如折线图、直方图、散点图等。在Jupyter Notebook中,你可以使用%matplotlib notebook%matplotlib inline命令,将图像直接显示在浏览器中。举个例子方便理解下:

import numpy as np
import matplotlib.pyplot as plt
在 -1010之间生成一个数列,共100个数
x = np.linspace(-10,10,100)
用正弦函数创建第二个数组
y = np.sin(x)
plot函数绘制一个数组关于另一个数组的折线图
plt.plot(x, y, marker="x") 
plt.show()

正弦函数的简单折线图
pandas是用于处理和分析数据的python库。它是基于一种叫作DataFrame的数据结构,这种数据结构模仿了R语言中的DataFrame。而pandas DateFrame是一张表格,类似于Excel表格,所以pandas中包含大量用于修改表格和操作表格的方法,使能够像SQL一样对表格进行查询和链接。NumPy要求数组中的所有元素类型必须完全相同,而pandas每一列数据的类型可以互不相同(比如整型、日期、浮点数和字符串)。pandas还可以从许多文件格式和数据库中提取数据,如SQL、Excel文件和逗号分隔值(csv)文件。
我们利用字典创建DataFrame:

import pandas as pd
from IPython.display import display
# 创建关于人的简单数据集
data = {'Name':["James", "Wade", "Curry", "Ken"],
        'Location': ["Cleveland", "SFC", "LSA", "NY"],
        'Age':[33,35,27,16]}
data_pandas = pd.DataFrame(data)
# IPython.display可以在Jupyter Notebook中打印出美观的DataFrame
display(data_pandas)

如果想要查询也很简单,比如:

#选择年来大于30的所有行
display(data_pandas[data_pandas.Age > 30]

以上便是机器学习中,python需要的几个库,让我们分析数据变得更轻松,更能解决各种问题。机器学习和数据分析本质上都是迭代过程,由数据驱动分析,这些过程必须要由快速迭代和易于交互的工具。而机器学习中,最重要的部分就是理解我们在处理的数据,以及这些数据与任务之间的关系,并选择算法。所以在我们构建模型之前,我们必须要理解数据集的内容。

猜你喜欢

转载自blog.csdn.net/caoyu1221/article/details/80631885