python机器学习基础教程-监督学习

1. 分类与回归

  分类:就是根据给定的标签,把新的数据划分到这些标签中的一个

  回归:就是根据事物一些属性,来判断这个事物的另一个属性在哪个区间范围

    比如:根据一个人的受教育程度,年龄等,判断这个人的收入在哪个范围内

  区别: 分类的输出是固定的,离散的,是一个点; 回归的输出是连续的,是区间.

2.泛化,过拟合与欠拟合

  泛化:一个模型能够对没见过的数据做出准确预测,就说模型能够从训练集泛化到测试集

  过拟合:构建的模型对于现有的数据来说过于复杂.即模型过分关注训练集的细节,得到在训练集上表现过好,但不能泛化到新数据上.

  欠拟合:模型在训练集上的表现就很差,就是欠拟合

3.监督学习算法

3.1 一些样本数据集

scikit-learn中数据集都是Bunch对象,包含了真实数据以及一些数据集信息(类似于字典)

3.1.1 forge数据集

导入必要的包

forge数据集有两个特征

# 生成数据集
X, y = mglearn.datasets.make_forge()  # X和y是forge返回的两个特征print("X.shape: {}".format(X.shape))  # X.shape: (26, 2)
# 数据集绘图mglearn.discrete_scatter(X[:,0],X[:,1],y)  # 输入X第0列和第1列作为x轴,将y作为y轴plt.legend(["Class 0", "Class 1"], loc=4)  # 设置图像的分类名称plt.xlabel("First feature")   # 设置图像x轴的名称plt.ylabel("Second feature")  # 设置图像的y轴的名称

3.1.2 wave数据集

wave数据集只有一个输入特征和一个连续的目标变量(x轴表示特征,y轴表示输出)

X, y = mglearn.datasets.make_wave(n_samples=40) # 生成40个数据,X.shape是(40,1),y.shape是(40,)
plt.plot(X, y, ‘o‘)  # 图中的点使用圆点表示
plt.ylim(-3, 3)    #设置y轴的区间显示范围
plt.xlabel("Feature")
plt.ylabel("Target")

3.1.3 cancer数据集

cancer数据集记录了乳腺癌肿瘤的临床测量数据,将每个肿瘤标记为良性和恶性(即只有两个标签)

from sklearn.datasets import load_breast_cancer
cancer = load_breast_cancer()
print(cancer.keys())
>>>dict_keys([‘data‘, ‘target‘, ‘target_names‘, ‘DESCR‘, ‘feature_names‘, ‘filename‘])

print(cancer.data.shape)print(cancer.target.shape)print(cancer.target_names)print(cancer.feature_names)>>>(569, 30)>>>(569,) >>>[‘malignant‘ ‘benign‘] >>>[‘mean radius‘ ‘mean texture‘ ‘mean perimeter‘ ‘mean area‘ ‘mean smoothness‘ ‘mean compactness‘ ‘mean concavity‘ ‘mean concave points‘ ‘mean symmetry‘ ‘mean fractal dimension‘ ‘radius error‘ ‘texture error‘ ‘perimeter error‘ ‘area error‘ ‘smoothness error‘ ‘compactness error‘ ‘concavity error‘ ‘concave points error‘ ‘symmetry error‘ ‘fractal dimension error‘ ‘worst radius‘ ‘worst texture‘ ‘worst perimeter‘ ‘worst area‘ ‘worst smoothness‘ ‘worst compactness‘ ‘worst concavity‘ ‘worst concave points‘ ‘worst symmetry‘ ‘worst fractal dimension‘]
{n: v for n, v in zip(cancer.target_names, np.bincount(cancer.target))}
>>>{‘malignant‘: 212, ‘benign‘: 357}

np.bincount的功能:用于统计每个数字的出现次数

x = np.array([0, 1, 1, 3, 2, 1, 7])a = np.bincount(x)>>>array([1, 3, 1, 1, 0, 0, 0, 1])# 如上例,x的范围就是0-7,bincount生成一个np.max(x)+1的array:a# 当a要生成第一个数时,此时要生成的数字索引为0,就在x中找0出现了多少次,本例为1次,append进来# 然后a生成第二个数,此时要生成的数组索引是1,就在x中找1出现了多少次,本例为3# 依次遍历到7,即x

np.bincount的weights参数

w = np.array([0.3, 0.5, 0.2, 0.7, 1., -0.6])
# 我们可以看到x中最大的数为4,因此bin的数量为5,那么它的索引值为0->4
x = np.array([2, 1, 3, 4, 4, 3])
# 索引0 -> 0
# 索引1 -> w[1] = 0.5
# 索引2 -> w[0] = 0.3
# 索引3 -> w[2] + w[5] = 0.2 - 0.6 = -0.4
# 索引4 -> w[3] + w[4] = 0.7 + 1 = 1.7
np.bincount(x,  weights=w)
# 因此,输出结果为:array([ 0. ,  0.5,  0.3, -0.4,  1.7])

3.1.4 波士顿房价数据集

这个数据集包含506个数据点,每个数据点有13个特征

from sklearn.datasets import load_boston
boston = load_boston()
print(boston.data.shape)
>>>(506, 13)

3.2 k近邻

3.2.1 k近邻分类,k-NN算法

取最近的邻居的类别当做自己的类别

mglearn.plots.plot_knn_classification(n_neighbors=1)

取3个邻居,并根据3个中类别包含最多个数的那个作为自己的类别

mglearn.plots.plot_knn_classification(n_neighbors=3)

3.2.2 应用k近邻算法

导入数据集,并划分训练集和测试集

from sklearn.model_selection import train_test_split
X, y = mglearn.datasets.make_forge()
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)

导入类并实例化knn算法,同时设置参数:邻居的个数

from sklearn.neighbors import KNeighborsClassifier
clf = KNeighborsClassifier(n_neighbors=3)

利用训练集对分类器进行拟合(对于knn就是保存训练集的数据,以便predict的时候计算举例)

clf.fit(X_train, y_train)>>>KNeighborsClassifier(algorithm=‘auto‘, leaf_size=30, metric=‘minkowski‘,
                     metric_params=None, n_jobs=None, n_neighbors=3, p=2,
                     weights=‘uniform‘)

调用predict方法进行预测

clf.predict(X_test)
>>>array([1, 0, 1, 0, 1, 0, 0])clf.score(X_test, y_test)>>>0.8571428571428571

3.2.3 分析KNeighborsClassifier

绘制决策边界: 绘制1个,3个和9个邻居的决策边界

fig, axes = plt.subplots(1, 3, figsize=(10,3)) # 绘制一个1行3列的共3个子图; fig是主图,axes是子图
for n_neighbors, ax in zip([1, 3, 9], axes):
    clf = KNeighborsClassifier(n_neighbors=n_neighbors).fit(X, y)
    mglearn.plots.plot_2d_separator(clf, X, fill=True, eps=0.5, ax=ax, alpha=.4)
    mglearn.discrete_scatter(X[:,0], X[:,1], y, ax=ax)
    ax.set_title("{} neighbor(s)".format(n_neighbors))
    ax.set_xlabel("feature 0")
    ax.set_ylabel("feature 1")
axes[0].legend(loc=3)    # loc标示legend的位置是左下角还是右下角,还是上边

# # # 待更新

原文地址:https://www.cnblogs.com/draven123/p/11372904.html

时间: 2024-11-11 06:37:04

python机器学习基础教程-监督学习的相关文章

《Python机器学习基础教程》高清版免费PDF下载

Python机器学习基础教程-[德] 安德里亚斯·穆勒(Andreas C.Müller)[美]莎拉·吉多(Sarah Guido) 著,张亮(hysic) 译 下载地址1:网盘下载 下载地址2:网盘下载 内容简介本书是机器学习入门书,以Python语言介绍.主要内容包括:机器学习的基本概念及其应用:实践中常用的机器学习算法以及这些算法的优缺点:在机器学习中待处理数据的呈现方式的重要性,以及应重点关注数据的哪些方面:模型评估和调参的方法,重点讲解交叉验证和网格搜索:管道的概念:如何将前面各章的方

段小手《深入浅出Python机器学习》PDF+代码+《Python机器学习基础教程》高清中英文PDF代码+张亮

机器学习正在迅速改变我们的世界.我们几乎每天都会读到机器学习如何改变日常的生活.如果你在淘宝或者京东这样的电子商务网站购买商品,或者在爱奇艺或是腾讯视频这样的视频网站观看节目,甚至只是进行一次百度搜索,就已经触碰到了机器学习的应用.使用这些服务的用户会产生数据,这些数据会被收集,在进行预处理之后用来训练模型,而模型会通过这些数据来提供更好的用户体验. 此外,目前还有很多使用机器学习技术的产品或服务即将在我们的生活当中普及,如能够解放双手的无人驾驶汽车.聪明伶俐的智能家居产品.善解人意的导购机器人

机器学习资料《分布式机器学习算法理论与实践》+《白话机器学习算法》+《Python机器学习基础教程》

机器学习正在迅速改变我们的世界.我们几乎每天都会读到机器学习如何改变日常的生活. 人工智能和大数据时代,解决最有挑战性问题的主流方案是分布式机器学习! <分布式机器学习:算法.理论与实践>电子书资料全面介绍分布式机器学习的现状,深入分析其中的核心技术问题,并且讨论该领域未来的发展方向. 我认为第3章到第8章是核心,讲解分布式机器学习的框架及其各个功能,分别针对其中的数据与模型划分模块.单机优化模块.通信模块.数据与模型聚合模块加以介绍.最有用的是第9章,学习由分布式机器学习框架中不同选项所组合

《Python机器学习基础教程》高清中文版PDF+高清英文版PDF+源代码

资源链接:https://pan.baidu.com/s/1sa64QTsQ7A5WlZxMuNmYHg<Python机器学习基础教程>高清中文版PDF+高清英文版PDF+源代码高清中文版PDF,306页,带目录和书签,文字能够复制粘贴:高清英文版PDF,392页,带目录和书签,彩色配图,文字能够复制粘贴:中英文两版可以对比学习.配套源代码:经典书籍,讲解详细:其中,高清中文版如图: 原文地址:http://blog.51cto.com/14063572/2317004

Python机器学习基础教程

介绍 本系列教程基本就是搬运<Python机器学习基础教程>里面的实例. Github仓库 使用 jupyternote book 是一个很好的快速构建代码的选择,本系列教程都能在我的Github仓库找到对应的 jupyter notebook . Github仓库:https://github.com/Holy-Shine/Introduciton-2-ML-with-Python-notebook 系列教程入口 Python机器学习基础教程-第一章-鸢尾花的例子KNN 原文地址:https

python机器学习基础教程-鸢尾花分类

一: 环境准备: 1.导入的库: import numpy as np import matplotlib.pyplot as plt import pandas as pd import mglearn 2.导入数据集 from sklearn.datasets import load_iris iris_dataset = load_iris() 二. 划分训练数据和测试数据 1. train_test_split: 将数据集打乱并进行拆分 from sklearn.model_select

《Python机器学习基础教程》中英文PDF及代码+原版+高清+穆勒+张亮

在基于TensorFlow的深度学习框架大红大紫之前,流行过很多的经典机器学习框架.比如KNN,比如支撑向量机,比如随机森林.相对于深度学习的理论,这些经典的机器学习算法构建在更为精密的数学推导上.运筹学,最优化理论,数学分析,数理统计和随机过程构成了这些算法的理论基础,也是进一步学习各种基于神经网络的深度学习算法的基础.本身介绍的scikit-learn是Python中对于经典机器学习框架的集大成者.在NumPy和SciPy之后,在TensorFlow之前,这本书和它介绍的scikit-lea

画出决策边界线--plot_2d_separator.py源代码【来自python机器学习基础教程】

1 import numpy as np 2 import matplotlib.pyplot as plt 3 from .plot_helpers import cm2, cm3, discrete_scatter 4 5 def _call_classifier_chunked(classifier_pred_or_decide, X): 6 # The chunk_size is used to chunk the large arrays to work with x86 7 # me

分享《机器学习基础教程》中文PDF+英文PDF

下载:https://pan.baidu.com/s/1Yr0sP96vxlhYPgE9CcZqCA 更多资料分享:http://blog.51cto.com/3215120 <机器学习基础教程>中文PDF+英文PDF中文PDF,带目录和书签:英文PDF,文字可以复制粘贴:两版可以对比学习.本书是一本机器学习入门教程,包含了数学和统计学的核心技术,用于帮助理解一些常用的机器学习算法.书中展示的算法涵盖了机器学习的各个重要领域:分类.聚类和投影.本书对一小部分算法进行了详细描述和推导,而不是简单