简介
在监督学习中,我们希望学习两个数据集之间的关系:观测数据 X 和我们想要预测的外部变量 y。
监督学习问题主要有两种类型:分类和回归。在分类中,目标是预测一个观测值的类别或种类,而在回归中,目标是预测一个连续的目标变量。
在这个实验中,我们将探索监督学习的概念,并了解如何使用 scikit-learn(Python 中一个流行的机器学习库)来实现它们。我们将涵盖最近邻分类、线性回归和支持向量机(SVM)等主题。
虚拟机使用提示
虚拟机启动完成后,点击左上角切换到笔记本标签页,以访问 Jupyter Notebook 进行练习。
有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。
如果你在学习过程中遇到问题,可以随时向 Labby 提问。课程结束后提供反馈,我们会及时为你解决问题。
最近邻分类
在这一步中,我们将探索最近邻分类的概念,以及如何使用 scikit-learn 来实现它。我们将使用鸢尾花数据集,该数据集包含了不同鸢尾花的测量数据。
加载鸢尾花数据集
import numpy as np
from sklearn import datasets
iris_X, iris_y = datasets.load_iris(return_X_y=True)
将数据拆分为训练集和测试集
np.random.seed(0)
indices = np.random.permutation(len(iris_X))
iris_X_train = iris_X[indices[:-10]]
iris_y_train = iris_y[indices[:-10]]
iris_X_test = iris_X[indices[-10:]]
iris_y_test = iris_y[indices[-10:]]
创建并拟合最近邻分类器
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier()
knn.fit(iris_X_train, iris_y_train)
进行预测
predictions = knn.predict(iris_X_test)
线性回归
在这一步中,我们将探索线性回归的概念,以及如何使用 scikit-learn 来实现它。我们将使用糖尿病数据集,该数据集包含患者的生理变量以及他们一年后的疾病进展情况。
加载糖尿病数据集
diabetes_X, diabetes_y = datasets.load_diabetes(return_X_y=True)
diabetes_X_train = diabetes_X[:-20]
diabetes_X_test = diabetes_X[-20:]
diabetes_y_train = diabetes_y[:-20]
diabetes_y_test = diabetes_y[-20:]
创建并拟合线性回归模型
from sklearn import linear_model
regr = linear_model.LinearRegression()
regr.fit(diabetes_X_train, diabetes_y_train)
进行预测并计算性能指标
predictions = regr.predict(diabetes_X_test)
mse = np.mean((predictions - diabetes_y_test)**2)
variance_score = regr.score(diabetes_X_test, diabetes_y_test)
支持向量机(SVM)
在这一步中,我们将探索支持向量机(SVM)的概念,以及它们如何用于分类任务。SVM 旨在找到一个超平面,将不同类别的数据点最大程度地分开。
创建并拟合线性 SVM
from sklearn import svm
svc = svm.SVC(kernel='linear')
svc.fit(iris_X_train, iris_y_train)
创建并拟合具有不同核的 SVM
svc_poly = svm.SVC(kernel='poly', degree=3)
svc_rbf = svm.SVC(kernel='rbf')
svc_poly.fit(iris_X_train, iris_y_train)
svc_rbf.fit(iris_X_train, iris_y_train)
总结
在这个实验中,我们学习了不同的监督学习技术,以及如何使用 scikit-learn 来实现它们。我们涵盖了最近邻分类、线性回归和支持向量机(SVM)。这些技术使我们能够从高维观测中预测输出变量,并将数据分类为不同的类别。通过将这些技术应用于实际数据集,我们可以在医疗保健、金融和社会科学等各个领域获得见解并进行预测。