一 环境配置
更新pip
python -m pip uninstall pip setuptools
python -m pip install --upgrade pip --user -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
python -m pip install pip setuptools -user -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
下载需要的包
pip install nump scipy matplotlib ipython scikit-learn pandas -user -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
安装mglearn
下载mglearn项目,并将mglearn文件夹复制到对应的Anaconda3安装目录的子目录下
下载地址
https://github.com/amueller/introduction_to_ml_with_python
Anaconda3\Lib\site-packages
–
鸢尾花学习流程
(1)准备原始数据
原始数据是一个集合
原始数据的内容一般为:
名称 | 数据类型 |
---|---|
data:原始数据集 | 类似二维数组,实则为一个对象 |
target:原始目标集 | 类似一维数组,实则为一个对象 |
frame:框体(后期用于显示) | None |
feature_names 原始数据各个特征名 | 集合 |
其中data和target分别有一个成员shape,其类型是元组,表示data和target的数据个数,和数据类型的个数
(2)将原始数据分割
分割为:
数据名称 | 作用 |
---|---|
X_train 训练数据集 | :用于后续训练出模型的数据集 |
X_test 测试数据集 | 用于训练后模型的输入变量 |
y_train目标训练集 | 用于训练出模型的目标数据集 |
y_test 目标测试集 | :用于和训练后的X_test作为输入变量输入模型后的结果比对的数据集 |
数据分割函数及其参数说明
# iris_dataset['data']需要分割的数据集
# iris_dataset['target']所要划分的样本结果,也就是说我们希望把数据集分割成怎么样
# random_state 随机数种子,其作用是打乱数据集,如果这个值是非None的整数,那么代表我们如果每次输入相同,那么输出也应该相同,也就是说t*f(x)=y,那么t就相当于t
# test_size:测试集占总样本的比例
X_train, X_test, y_train, y_test = train_test_split(iris_dataset['data'], iris_dataset['target'], random_state=42,
test_size=0.25, stratify=iris_dataset['target'])
(3)通过可视化图像观察模型是否可靠
绘制散点矩阵,以便于让2个以上的数据的特征可视化,散点矩阵对角线上的图是每个特征的直方图(也就是单一特征的柱状图)
需要用到的函数及其参数说明
# colunms=iris_dataset.feature_names,按照iris_dataset_feature_names中的字符串对数据列进行标记
iris_dataframe = pd.DataFrame(X_train, columns=iris_dataset.feature_names)
# 相当于将参数传递给matplotlib.pyplot
# frame,pandas dataframe对象
# alpha,透明度,一般取(0,1]
# diagonal 必选,选{'hist','kde'}中的一个,’hist‘表示直方图,‘kde’表示核密度估计
# figsize,以英寸为单位的图像大小,一般以元组 (width, height) 形式设置
# marker,Matplotlib可用的标记类型,如’.’,’,’,’o’等,也就是点的形状
# ax,可选一般为none
# density_kwds,(other plotting keyword arguments,可选),与kde相关的字典参数
# range_padding,(float, 可选),图像在x轴、y轴原点附近的留白(padding),该值越大,留白距离越大,图像远离坐标原点
# hist_kwds,与hist相关的字典参数,对角线上直方图的参数元组,这个参数指定bin(箱子)的个数,也就是总共有几条条状图
# s,描出的点的大小
# c颜色,这里是按照训练集的类型着色
# cmap=mglearn.cm3 mylearn实用函数库,主要对图进行一些美化等私有功能
grr = pd.plotting.scatter_matrix(iris_dataframe, alpha=0.8, diagonal='hist', figsize=(15, 15), marker='o', ax=None,
range_padding=0, hist_kwds={'bins': 20}, s=60, c=y_train, cmap=mglearn.cm3)
# 通过matplolib.pyplot显示图片
matplotlib.pyplot.show()
使用邻近算法进行构建数据模型
k近邻算法中k的含义是,我们可以考虑训练集中与新数据点最近的任意k个邻居(比如说,距离最近的3个或5个邻居),而不是只考虑最近的那一个。然后,我们可以用这些邻居中数量最多的类别做出预测。现在我们只考虑一个邻居的情况
# 设置训练参数,n_neighbors邻居数,
knn = KNeighborsClassifier(n_neighbors=1)
# 开始训练
knn.fit(X_train, y_train)
模型评估
将测试数据集作为参数传入已经构建好的模型中,将经过处理后得到的模型预测目标数据集与测试目标数据集作比对得到测试精度,从而评估模型的可靠性
# 得到模型预测目标数据集(一维数组)
y_pred = knn.predict(X_test)
# 将模型目标预测数据集与测试目标数据集比对得到测试精度
accuracy = np.mean(y_pred == y_test)
做预测
# 改变预测参数的格式使得可以传参
X_new = np.array([[5, 2.9, 1, 0.2]])
# 开始预测预测,预测时传入的参数应为类似二维数组(实则为一个对象)的格式
prediction = knn.predict(X_new)
需要导入的库
import sys
import pandas as pd
import matplotlib
import numpy as np
import scipy as sp
import IPython
import sklearn
import mglearn
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
np.mean说明
是无监督学习,解决的是聚类问题,即训练数据集没有分类标签,通过K-Means算法将数据集划分为K类