打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Python机器学习基础教程【第一章】

本书的附加代码可以在 GitHub 下载:introduction to ml with python

监督学习算法(supervised learning algorithm)
无监督学习算法(unsupervised learning algorithm)

在机器学习中,这里的每个实体或每一行被称为一个样本(sample)或数据点,而每一列(用来描述这些实体的属性)则被称为特征(feature)。

如何构建良好的数据表征,这被称为特征提取(feature extraction)或特征工程(feature engineering)

scikit-learn 依赖于另外两个 Python 包:NumPy (Python 科学计算的基础包之一)和 SciPy( Python 中用于科学计算的函数集合)。
算法详细文档:https://scikit-learn.org/stable/index.html
用户指南:http://scikit-learn.org/stable/user_guide.html

若想绘图和进行交互式开发,还应该安装 matplotlib(Python 主要的科学绘图库)、IPython 和 Jupyter Notebook(在浏览器中运行代码的交互环境)。

pandas 是用于处理和分析数据的 Python 库。它基于一种叫作 DataFrame 的数据结构,这种数据结构模仿了 R 语言中的 DataFrame。

mglearn 库是我们为本书编写的实用函数库,以免将代码清单与绘图和数据加载的细节混在一起。

第一个应用

1、了解数据

in:

from sklearn.datasets import load_iris iris_dataset = load_iris() print('Keys of iris_dataset: \n{}'.format(iris_dataset.keys()))

out:

Keys of iris_dataset: dict_keys(['data', 'target', 'frame', 'target_names', 'DESCR', 'feature_names', 'filename', 'data_module'])
  • DESCR 键对应的值是数据集的简要说明
  • target_names 键对应的值是一个字符串数组,里面包含我们要预测的花的品种
  • feature_names 键对应的值是一个字符串列表,对每一个特征进行了说明
  • data 里面是花萼长度、花萼宽度、花瓣长度、花瓣宽度的测量数据,格式为 NumPy 数组,data 数组的每一行对应一朵花,列代表每朵花的四个测量数据,数组中包含 150 朵不同的花的测量数据。
  • target 是一维数组,每朵花对应其中一个数据,0 代表 setosa,1 代表 versicolor,2 代表 virginica
2、划分训练集和测试集

机器学习中的个体叫作样本(sample),其属性叫作特征(feature)。data 数组的形状(shape)是样本数乘以特征数。

一部分数据用于构建机器学习模型,叫作训练数据(training data)或训练
集(training set)。其余的数据用来评估模型性能,叫作测试数据(test data)、测试集(test set)或留出集(hold-out set)。

train_test_split 函数可以打乱数据集并进行拆分。

scikit-learn 中的数据通常用大写的 X 表示,而标签用小写的 y 表示。

# 划分训练集和测试集 from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(iris_dataset['data'], iris_dataset['target'], random_state=0)
image
image
  • random_state 参数指定了随机数生成器的种子,保证这行代码的输出始终相同;
3、观察数据

如果不用机器学习能不能轻松完成任务,或者需要的信息有没有包含在数据中?检查数据也是发现异常值和特殊值的好方法。

检查数据的最佳方法之一就是将其可视化。

一种可视化方法是绘制散点图(scatter plot),用这种方法难以对多于 3 个特征的数据集作图。

解决这个问题的一种方法是绘制散点图矩阵(pair plot),从而可以两两查看所有的特征。散点图矩阵无法同时显示所有特征之间的关系,所以这种可视化方法可能无法展示数据的某些有趣内容。

训练集中特征的散点图矩阵:

# 利用X_train中的数据创建DataFrame
# 利用iris_dataset.feature_names中的字符串对数据列进行标记
iris_dataframe = pd.DataFrame(X_train, columns=iris_dataset.feature_names)
# 利用DataFrame创建散点图矩阵,按y_train着色
grr = pd.scatter_matrix(iris_dataframe, c=y_train, figsize=(15, 15), marker='o',
 hist_kwds={'bins': 20}, s=60, alpha=.8)
image

绘制散点图矩阵函数: pandas的scatter_matrix。
版本较新换成:pd.plotting.scatter_matrix

pandas.DataFrame( data, index, columns, dtype, copy)

  • data:一组数据(ndarray、series, map, lists, dict 等类型)[1]
  • index:索引值,或者可以称为行标签。
  • columns:列标签,默认为 RangeIndex (0, 1, 2, …, n) 。
  • dtype:数据类型。
  • copy:拷贝数据,默认为 False。

scatter_matrix(frame, alpha=0.5, c,figsize=None, ax=None, diagonal='hist', marker='.', density_kwds=None,hist_kwds=None, range_padding=0.05, **kwds)

  • frame,pandas dataframe对象[2]
  • alpha, 图像透明度,一般取(0,1]
  • figsize,以英寸为单位的图像大小,一般以元组 (width, height) 形式设置
  • ax,可选一般为none
  • diagonal,必须且只能在{'hist’, 'kde’}中选择1个,’hist’表示直方图(Histogram plot),’kde’表示核密度估计(Kernel Density Estimation);该参数是scatter_matrix函数的关键参数
  • marker。Matplotlib可用的标记类型,如’.’,’,’,’o’等[3]
  • density_kwds。(other plotting keyword arguments,可选),与kde相关的字典参数
  • hist_kwds。与hist相关的字典参数
  • range_padding。(float, 可选),图像在x轴、y轴原点附近的留白(padding),该值越大,留白距离越大,图像远离坐标原点
  • kwds。与scatter_matrix函数本身相关的字典参数
  • c。颜色
4、构建模型:k近邻算法

k 近邻分类器算法对一个新的数据点做出预测,算法会在训练集中寻找与这个新数据点距离最近的数据点,然后将找到的数据点的标签赋值给这个新数据点。

k 近邻算法中 k 的含义是,我们可以考虑训练集中与新数据点最近的任意 k 个邻居(比如说,距离最近的 3 个或 5 个邻居),而不是只考虑最近的那一个。然后,我们可以用这些邻居中数量最多的类别做出预测。

scikit-learn 中所有的机器学习模型都在各自的类中实现,这些类被称为 Estimator类。k 近邻分类算法是在 neighbors 模块的KNeighborsClassifier 类中实现的。

from sklearn.neighbors import KNeighborsClassifier knn = KNeighborsClassifier(n_neighbors=1) # 实例化 # 基于训练集来构建模型 knn.fit(X_train, y_train)

fit 方法返回的是 knn 对象本身并做原处修改,因此我们得到了分类器的字符串表示。

5、预测

in:

X_new = np.array([[5, 2.9, 1, 0.2]])
prediction = knn.predict(X_new)   
print('Prediction: {}'.format(prediction))

out:

Prediction: [0]

们模型的预测,这朵新的鸢尾花属于类别 0,也就是说它属于 setosa 品种。

6、评估模型

计算精度(accuracy)来衡量模型的优劣,精度就是品种预
测正确的花所占的比例。

in:

print('Test set score: {:.2f}'.format(np.mean(y_pred == y_test)))

out:

Test set score: 0.97
print('Test set score: {:.2f}'.format(knn.score(X_test, y_test))) 
# knn 对象的 score 方法来计算测试集的精度,结果是一致的

对于测试集中的鸢尾花,我们的预测有 97% 是正确的。根据一些数学假设,对于新的鸢尾花,可以认为我们的模型预测结果有 97% 都是正确的。

7、总结

首先有150行样本,4列特征的鸢尾花(Iris)数据集。

鸢尾花(Iris)一共有三个品种:setosa、versicolor 或 virginica,因此这是一个三分类问题。在分类问题中,可能的品种被称为类别(class),每朵花的品种被称为它的标签(label)。

  • 划分训练集和测试集(train_test_split 函数)
  • 构建模型:k近邻算法(knn.fit 函数)
  • 预测测试集(knn.predict 函数)
  • 计算精度(knn.score 函数)

问题解决

name 'null' is not defined
Traceback (most recent call last): File 'd:\MyData\**\book-Python����ѧϰ�����̳�.ipynb', line 23, in <module> 'execution_count': null, NameError: name 'null' is not defined [Done] exited with code=1 in 0.198 seconds

重装Vscode中的jupyter插件

mglearn如何导入本地

1、下载包:https://github.com/amueller/introduction_to_ml_with_python

2、查看包的存放位置
cell中输入:%pip show pandas ,运行,查看包的位置(c:\users\用户名\appdata\local\programs\python\python310\lib\site-packages

3、把mglearn文件夹放到包的存放位置(c:\users\用户名\appdata\local\programs\python\python310\lib\site-packages

mylearn一些函数过时了,无法导入 :


image

mylearn主要是用于美化的,所以在此先忽略掉

参考文章


  1. Pandas 数据结构 - DataFrame

  2. pandas库scatter_matrix绘图可视化参数详解

  3. 绘图的线型、颜色、标记

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
10分钟掌握Python-机器学习小项目
Python 数据可视化,常用看这一篇就够了
可视化神器Seaborn的超全介绍
Seaborn常用的10种数据分析图表
Python数据可视化的10种技能
强烈推荐一款Python可视化神器!强烈必备!
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服