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

2023-02-01  本文已影响0人  看远方的星

本书的附加代码可以在 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'])
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
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)

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)

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)。

问题解决

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. 绘图的线型、颜色、标记

上一篇下一篇

猜你喜欢

热点阅读