Python简单监督学习算法—开启入门机器学习的钥匙
本监督学习教程适合机器学习初学者。
当然,如果你已经很擅长监督学习,可以快速观看本教程来测试你的理解程度~
什么是监督学习?
在监督学习中,我们导入由训练特征和目标特征组成的数据集。监督学习算法从数据集中学习训练样本与其变量之间的关系,然后使用学习到的关系对新样本(未标记样本)进行分类。
为了说明监督学习的工作原理,让我们使用根据学生的学习时间预测考试成绩的示例。
用数学表达,即 Y = f(X)+C,其中
- f 表示学生学习时间与考试成绩的关系
- X 表示输入(学习时数)
- 表示输出(测试分数)
- C代表随机误差
监督学习算法的最终目标是提供输入X信息来提高预测结果Y的准确性。监督学习的实现方式有很多种,我们将看看一些最常见的。
根据给定的数据,机器学习可以分为两大类:分类(classification)和回归(Regression)。如果给定的数据值是分类的,则要解决的问题是分类问题。如果数据输出的值持续存在,则问题出在恢复中。
举两个例子
分类:识别是猫还是狗。
返回:房子多少钱?
类别
考虑一个示例,其中医学研究人员想要分析乳腺癌数据以预测患者将接受三种治疗方案中的哪一种。这个数据分析问题是一个分类问题。分类模型用于预测类别标签,例如“治疗计划A”、“治疗计划B”或“治疗计划C”。
分类是预测类别标签的预测问题,类别标签是唯一且无序的。分类包括两个阶段:学习阶段和分类阶段。分类 在学习阶段,分类模型通过分析数据集来构建分类器。在分类步骤中,分类器对给定的数据进行分类。用于分析的数据(由数据及其相关参数组成)分为训练集和测试集。训练集是从用于分析的数据集中随机抽取的。 其余数据组成实验。测试和训练是相互独立的,即测试集中的数据不会用于构建分类器。
用于评估测试的分类准确性。分类器的准确性表示为测试集中正确预测的百分比。为了获得更高的程度,最好的方法是测试不同的算法,同时为每个算法尝试不同的参数。通过交互测试可以得到最佳的算法和参数。
对于给定的问题,在选择算法时,必须考虑算法的准确性、训练时间、线性度、参数数量和特殊情况。
将 KNN 应用到 IRIS 数据的 sklearn 中,并对给定输入执行花型分类。
首先,要实现机器学习算法,我们需要了解给定数据的结构。在本例中,我们使用sklearn包中的IRIS数据集。让我们使用代码来查看 IRIS 数据。
请确保您的计算机上已正确安装Python。接下来,通过 PIP 安装以下 python 库:
pip install pandas
pip install matplotlib
pip install scikit-learn
在下面的代码中,我们使用一些 pandas 方法来检查 IRIS 数据库的一些属性。
from sklearn import datasets
import pandas as pd
import matplotlib.pyplot as plt
# Loading IRIS dataset from scikit-learn object into iris variable.
iris = datasets.load_iris()
# Prints the type/type object of iris
print(type(iris))
# <class 'sklearn.datasets.base.Bunch'>
# prints the dictionary keys of iris data
print(iris.keys())
# prints the type/type object of given attributes
print(type(iris.data), type(iris.target))
# prints the no of rows and columns in the dataset
print(iris.data.shape)
# prints the target set of the data
print(iris.target_names)
# Load iris training dataset
X = iris.data
# Load iris target set
Y = iris.target
# Convert datasets' type into dataframe
df = pd.DataFrame(X, columns=iris.feature_names)
# Print the first five tuples of dataframe.
print(df.head())
输出:
<class ‘sklearn.datasets.base.Bunch’>
dict_keys([‘data’, ‘target’, ‘target_names’, ‘DESCR’, ‘feature_names’])]
<class ‘numpy.ndarray’> <class ‘numpy.ndarray’>
(150, 4)
[‘setosa’ ‘versicolor’ ‘virginica’]
sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)
0 5.1 3.5 1.4 0.2
1 4.9 3.0 1.4 0.2
2 4.7 3.2 1.3 0.2
3 4.6 3.1 1.5 0.2
4 5.0 3.6 1.4 0.2
Sklearn 中的 K 最近邻算法
如果一个算法只是简单地存储训练数据并等待测试数据集,则该算法可以被视为“惰性学习方法”。给定测试数据,它根据新样本与存储的训练集样本的相似性对新样本进行分类。
K 最近邻分类器是一种惰性学习方法。
K 最近邻基于隐喻学习,将测试样本与相同的训练数据进行比较。训练集具有 n 个属性的表示。每个样本由 n 维空间中的一个点表示。这样,训练集中的所有样本都存储在n维模型空间中。 当给定一个未知样本时,最近邻分类器在模型空间中搜索距离未知样本最近的 k 个训练样本。这 k 个训练样本是与未知样本最接近的 k 个。
“接近”是用距离来衡量的,比如欧氏距离。更好的K值可以通过实验确定。
在下面的代码中,我们导入 KNN 分类器,将其应用于我们的数据,并对花朵进行分类。
from sklearn import datasets
from sklearn.neighbors import KNeighborsClassifier
# Load iris dataset from sklearn
iris = datasets.load_iris()
# Declare an of the KNN classifier class with the value with neighbors.
knn = KNeighborsClassifier(n_neighbors=6)
# Fit the model with training data and target values
knn.fit(iris['data'], iris['target'])
# Provide data whose class labels are to be predicted
X = [
[5.9, 1.0, 5.1, 1.8],
[3.4, 2.0, 1.1, 4.8],
]
# Prints the data provided
print(X)
# Store predicted class labels of X
prediction = knn.predict(X)
# Prints the predicted class labels of X
print(prediction)
输出:
[1 1]
其中0、1、2代表不同的花。在此示例中,对于给定的输入,KNN 分类器将它们全部预测为类别 1 的花朵。
K使用 NN 的 IRIS 数据分类的直观视图
回归
通过确定两个或多个变量之间的关系来定义回归。比如你想根据数据X来预测一个人的收入,这里变量表示该变量是我们关心的、想要预测的未知变量,连续表示的值Y 没有区间。
预测是一个常见的回归问题。您的条目应包括预测收入的所有与收入相关的个人信息(例如,个性),例如工作时间、教育程度、职称和居住地。
回归模型
一些常见的回归模型有
- 线性回归
- 逻辑回归
- 设置多项式回归Y)与一个或多个自变量(X)之间的关系。
用数学术语表示,即 h(xi) = βo + β1 * xi + e, ,其中 ❀ 是 ❀,❀ 是 ❀ ❀ ❀
e 为误差项
如图所示,即
Logistic 回归是一种类预测算法,用于寻找“特征”与潜在特效之间的关系。
当然,我们也可以将逻辑回归归为一种分类算法,但是正如我们刚才所说,逻辑回归的输出是目标对象属于一类的概率。由于概率是连续的,所以我们仍然将逻辑回归视为回归算法。
用数学公式表示:p(X) = βo + β1 * X,其中 p(x) = p(y = 1 | 对应于变量因变量 x 和因变量 y 之间关系的回归算法x的n阶多项式。
解决线性回归问题
有一组训练样本和测试样本。有标签。测试样本是没有标签的,你不知道其参数值采样您尝试预测的训练数据,然后预测测试输出。
使用Sklearn应用线性回归
from sklearn import datasets, linear_model
import matplotlib.pyplot as plt import numpy as np # 加载糖尿病数据集diabetes = datasets.load_diabetes() # 仅使用一项特征来训练diabetes_X =diabetes.data[:, np. newaxis, 2] # 分割训练/测试的目标糖尿病_X_train = 糖尿病_X[:-20] 糖尿病_X_test = 糖尿病_X[-20:] # 分割训练/测试的目标糖尿病_y_train = 糖尿病.target[:-20] 糖尿病_y_test = 糖尿病。 target[-20:] # 创建线性回归对象 regr = Linear_model.LinearRegression() # 通过训练来训练模型 regr.fit(diabetes_X_train,diabetes_y_train) # 输入数据 print('Input Values') print(diabetes_X_test) # 制作一个使用测试进行预测diabetes_y_pred = regr.predict(diabetes_X_test) # 预测数据 print("预测数据") print(diabetes_y_pred) # 绘图输出 plt.scatter(diabetes_X_test,糖尿病_y_test, color='black ') plt.plot (diabetes_X test,糖尿病_y_pred,color='red', linewidth=1) plt.show()
输入
输入值:
[ [ 0.07786339] [-0.03961813] [ 0.01103904] [-0.04069594] [-0.03422907] [ 0.00564998] [ 0.08864151] [-0.03315126] [-0.05686312] [-0.03099563] [ 0.05522933] [-0.06009656] [ 0.00133873] [-0.02345095] [-0.07410811] [ 0.01966154] [-0.01590626] [-0.01590626] [ 0.03906215] [-0.0730303 ] ]
预测输出值:
[ 225.9732401 115.74763374 163.27610621 114.73638965 120.80385422 158.21988574 236.08568105 121.81509832 99.56772822 123.83758651 204.73711411 96.53399594 154.17490936 130.91629517 83.3878227 171.36605897 137.99500384 137.99500384 189.56845268 84.3990668 ]
End♷- Scikit-Learn
- Tensorflow
- Pytorch
首次发表时间:2018-02-18
本文作者:Digest Fungus
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。