让我们来探索一些非常适合数据科学初学者的机器学习算法。我们将解释每一种算法,并展示如何有效地使用它们。
作者在Canva上创建的图片
机器学习已经成为数据科学家工具箱中的一个重要工具,并且在过去的十年里,由于其在各种高级应用中的使用,它已经成为一个广为人知的概念。
为了有效利用机器学习的力量,理解其底层概念及其实际应用是至关重要的。
在本文中,我们将探索最适合数据科学初学者的十大机器学习算法及其应用。让我们开始吧!
1. 线性回归图片由作者提供
线性回归通过建立输入变量和输出之间的线性关系来预测连续输出。想象在一张图表上画一条直线穿过一组点。
它通过找到最适合数据点的直线来决定。这条直线是通过最小化实际值与直线预测值之间的差异(误差)来确定的。
评估指标均方误差 (MSE) :衡量误差平方的平均值。较低的值表示更好的性能。
R平方:表示可以基于自变量预测因变量变化的比例。越接近1越好。
使用Sci-kit Learn应用由于我们首先讨论线性回归,我们将使用糖尿病数据集,这是一个预加载在 scikit-learn 中的理想用于回归任务的数据集。
以下是我们将在下面的代码块中遵循的步骤;
- 加载糖尿病数据集:该数据集包括10个基线变量,如年龄、性别、BMI、平均血压和6项血液生化指标,用于糖尿病患者。
- 划分数据集:将其分为训练集和测试集。
- 创建并训练线性回归模型:使用训练集构建模型。
- 预测和评估:使用测试集进行预测,然后使用均方误差(MSE)和R平方评估模型。
现在让我们开始吧!
从 sklearn.datasets 导入 load_diabetes
从 sklearn.model_selection 导入 train_test_split
从 sklearn.linear_model 导入 LinearRegression
从 sklearn.metrics 导入 mean_squared_error, r2_score
# 加载糖尿病数据集
diabetes = load_diabetes()
X, y = diabetes.data, diabetes.target
# 将数据集拆分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建并训练线性回归模型
model = LinearRegression()
model.fit(X_train, y_train)
# 预测测试集的结果
y_pred = model.predict(X_test)
# 评估模型
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
print("均方误差是:", mse)
print("R2 分数是:", r2)
这里是输出。
这些结果表明,我们的线性回归模型解释了糖尿病数据集中约45%的变化。均方误差(MSE)告诉我们,我们的预测值平均与真实值相差约2900个单位。
2. 逻辑回归图片由作者提供
逻辑回归用于分类问题。它预测某个数据点属于某一类别的概率,比如是或否、0或1。它使用逻辑函数输出一个介于0和1之间的值。然后根据一个阈值(通常是0.5)将该值映射到特定的类别。
评估指标- 准确率 : 准确率是正确预测的观测值与总观测值的比率。
- 精确率和召回率 : 精确率是正确预测的正例观测值与所有预期的正例观测值的比率。召回率是正确预测的正例观测值与实际类别中所有观测值的比例。
- F1分数 : 精确率和召回率之间的平衡。
乳腺癌数据集,scikit-learn中预加载的另一个数据集。它用于二分类任务,非常适合逻辑回归。
这里我们将遵循以下步骤来应用逻辑回归。
- 加载乳腺癌数据集 : 该数据集包含从乳腺肿块的细针抽吸(FNA)图像中计算出的特征,目标是将其分类为良性或恶性。
- 划分数据集 : 将其分为训练集和测试集。
- 创建并训练逻辑回归模型 : 使用训练集构建模型。
- 预测和评估 : 使用测试集进行预测,然后使用准确率、精确率、召回率和F1分数评估模型。
让我们看看代码。
from sklearn.datasets import load_breast_cancer
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
# 加载乳腺癌数据集
breast_cancer = load_breast_cancer()
X, y = breast_cancer.data, breast_cancer.target
# 将数据集划分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建并训练逻辑回归模型
model = LogisticRegression(max_iter=10000)
model.fit(X_train, y_train)
# 预测测试集的结果
y_pred = model.predict(X_test)
# 评估模型
accuracy = accuracy_score(y_test, y_pred)
precision = precision_score(y_test, y_pred)
recall = recall_score(y_test, y_pred)
f1 = f1_score(y_test, y_pred)
# 打印结果
print("Accuracy:", accuracy)
print("Precision:", precision)
print("Recall:", recall)
print("F1 Score:", f1)
这里是输出。
高召回率表明该模型特别擅长识别恶性病例,在医学诊断中这一点尤为重要。
3. 决策树图片由作者提供
决策树就像流程图,根据某些条件或特征将数据进行分割。它们既可以应用于回归,也可以应用于分类。
其工作原理是通过使用特征值将数据集分割成更易管理的子组。每个内部节点代表一个属性测试,每个分支表示测试的结果,每个叶节点代表一个类别标签(决策)。
评估指标- 对于分类: 准确率、精确率、召回率和F1分数。
- 对于回归: 均方误差(MSE)、R平方。
我们将使用葡萄酒数据集来进行决策树分类任务。该数据集是根据不同的属性将葡萄酒分为三种类型。我们将训练模型,预测葡萄酒类型,并使用分类指标来评估模型。
以下是我们将在下面代码中遵循的步骤。
- 加载葡萄酒数据集:
- 葡萄酒数据集包含了对意大利同一地区生产的三种不同品种葡萄酒的化学分析。研究中确定了在三种不同类别的葡萄酒中以不同含量存在的十三种成分。
2. 分割数据集:
- 数据集中包含训练集和测试集。这样可以使用一部分数据(训练集)来训练模型,并使用未见过的数据(测试集)来测试模型性能。我们使用了80%的数据进行训练,20%的数据进行测试。
3. 创建并训练决策树模型:
- 创建了一个决策树分类器。该模型将从训练数据中学习。它构建了一个树状的决策模型,其中树中的每个节点代表数据集的一个特征,而分支代表决策规则,导向不同的结果或分类。
4. 预测和评估:
- 模型用于预测测试集的分类。然后通过将这些预测与实际标签进行对比来评估模型的性能。
这里是代码。
from sklearn.datasets import load_wine
from sklearn.tree import DecisionTreeClassifier
# 加载葡萄酒数据集
wine = load_wine()
X, y = wine.data, wine.target
# 将数据集拆分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建并训练决策树模型
model = DecisionTreeClassifier(random_state=42)
model.fit(X_train, y_train)
# 预测测试集的结果
y_pred = model.predict(X_test)
# 评估模型
accuracy = accuracy_score(y_test, y_pred)
precision = precision_score(y_test, y_pred, average='macro')
recall = recall_score(y_test, y_pred, average='macro')
f1 = f1_score(y_test, y_pred, average='macro')
# 打印结果
print("准确率:", accuracy)
print("精确率:", precision)
print("召回率:", recall)
print("F1分数:", f1)
这里是输出。
这些结果表明决策树模型在这个数据集上表现非常好。高精确率表明,当它预测某种特定类型的葡萄酒时,通常是正确的。
4. 朴素贝叶斯“朴素贝叶斯分类器”是一类简单的“概率分类器”,它们使用贝叶斯定理,并假设特征之间存在较强的(朴素的)独立性。这类分类器特别适用于文本分类。
它计算每个类别的概率以及每个输入值给定每个类别的条件概率。然后根据概率最高的类别来对新值进行分类。
评估指标:- 准确率: 测量模型的整体正确性。
- 精确率、召回率和F1分数:在类别分布不平衡的情况下尤为重要。
我们将使用数字数据集,该数据集涉及对手写数字(0-9)的图像进行分类。这是一个多类分类问题。我们将训练朴素贝叶斯模型,预测数字类别,并使用分类指标进行评估。以下是我们的操作步骤。
- 加载数字数据集:
- 数字数据集包含8x8像素的手写数字图像(从0到9)。每个图像表示为一个包含64个值(8x8像素)的特征向量,每个值代表一个像素的灰度强度。
2. 分割数据集:
- 与之前的例子类似,数据集被分为训练集和测试集。我们用80%的数据进行训练,用20%的数据进行测试。这有助于在大量数据上训练模型,然后在它之前未见过的数据集上评估其性能。
3. 创建并训练朴素贝叶斯模型:
- 创建了一个高斯朴素贝叶斯分类器。这种朴素贝叶斯的变体假设每个特征的连续值服从高斯(正态)分布。
- 然后在训练数据上训练(拟合)模型。它学习将输入特征(像素值)与目标值(数字类别)关联起来。
4. 预测和评估:
- 训练完成后,模型用于预测测试数据的类别标签。
以下是下面的代码。
从 sklearn.datasets 导入 load_digits
从 sklearn.naive_bayes 导入 GaussianNB
# 加载数字数据集
digits = load_digits()
X, y = digits.data, digits.target
# 将数据集拆分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建并训练朴素贝叶斯模型
model = GaussianNB()
model.fit(X_train, y_train)
# 预测测试集的结果
y_pred = model.predict(X_test)
# 评估模型
accuracy = accuracy_score(y_test, y_pred)
precision = precision_score(y_test, y_pred, average='macro')
recall = recall_score(y_test, y_pred, average='macro')
f1 = f1_score(y_test, y_pred, average='macro')
# 打印结果
print("准确率:", accuracy)
print("精确率:", precision)
print("召回率:", recall)
print("F1 分数:", f1)
这里是输出。
这些结果表明,Naive Bayes 模型在此数据集上表现良好,精确率和召回率相当均衡。该模型在分类手写数字方面相当有效,尽管在准确率和 F1 分数方面仍有改进空间。
5. K-近邻算法(KNN)图片由作者提供
一个易于理解的回归和分类方法是K-Nearest Neighbors(KNN)。一个数据点的分类依据其邻居的分类进行确定。
KNN 会查看数据点周围最接近的“K”个点(邻居),并根据这些邻居中的多数类别来对其进行分类。对于回归问题,它会取“K”个最近点的平均值。
评估指标- 分类 : 准确率, 精确率, 召回率, F1 分数.
- 回归 : 均方误差 (MSE), R 平方.
我们将再次使用葡萄酒数据集,但这次使用KNN。我们将训练KNN模型来分类葡萄酒的类型,并使用分类指标来评估其性能。以下是我们的操作步骤。
1. 创建并训练KNN模型:
- 创建了一个K-Nearest Neighbors (KNN) 模型,设置
n_neighbors=3
。这意味着该模型在预测时会参考数据点最近的三个邻居。 - 该模型使用训练数据进行训练(拟合)。在训练过程中,它不会构建传统的模型,而是记住整个数据集。
2. 预测:
- 训练好的KNN模型然后用于预测测试数据的类别标签(葡萄酒的类型)。通过检查训练集中的三个最近邻点,模型为测试集中的每个点确定最常见的类别。
3. 评估:
- 模型的预测结果与测试集的实际标签进行评估。
这里是代码。
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
# 加载葡萄酒数据集
wine = load_wine()
X, y = wine.data, wine.target
# 将数据集拆分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建并训练KNN模型
knn_model = KNeighborsClassifier(n_neighbors=3)
knn_model.fit(X_train, y_train)
# 预测测试集的结果
y_pred_knn = knn_model.predict(X_test)
# 评估模型
accuracy_knn = accuracy_score(y_test, y_pred_knn)
precision_knn = precision_score(y_test, y_pred_knn, average='macro')
recall_knn = recall_score(y_test, y_pred_knn, average='macro')
f1_knn = f1_score(y_test, y_pred_knn, average='macro')
# 打印结果
print("准确率:", accuracy_knn)
print("精确率:", precision_knn)
print("召回率:", recall_knn)
print("F1分数:", f1_knn)
这里是输出。
这些结果表明,KNN模型在此数据集上表现非常出色。所有指标的高分表明该模型不仅整体准确,而且在精确率和召回率之间保持了良好的平衡,有效地对葡萄酒类型进行了分类。
6. 支持向量机(SVM)图片由作者提供
支持向量机(SVM) 是一种强大且多用途的监督学习模型,可用于分类和回归任务。它们在处理复杂数据集时表现良好。
SVM 在高维空间中构建超平面(或一组超平面)以分离不同类别。它的目标是找到最佳的间隔(即,分离线与每个类别最近点之间的距离,这些最近点被称为支持向量)。
评估指标- 分类 : 准确率, 精确率, 召回率, F1 分数.
- 回归 : 均方误差 (MSE), R 平方.
我们将支持向量机应用于乳腺癌数据集,重点是将肿瘤分类为良性或恶性。我们将训练支持向量机模型,并使用分类指标评估其性能。
这里我们将遵循以下步骤;
- 创建并训练SVM模型 :
- 使用默认设置创建了一个支持向量机(SVM)模型。SVM以其能够在类别之间尽可能地创建一个最大间隔的超平面(或在高维空间中的多个超平面)而著称。
2. 预测:
- 训练好的支持向量机模型然后用于预测测试数据的类别标签。它通过确定每个数据点位于超平面的哪一侧来实现这一点。
3. 评估:
- 模型的预测结果与测试集的实际标签进行对比,以评估其性能。
这里是一段代码。
from sklearn.svm import SVC
breast_cancer = load_breast_cancer()
X, y = breast_cancer.data, breast_cancer.target
# 将数据集拆分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建并训练SVM模型
svm_model = SVC()
svm_model.fit(X_train, y_train)
# 预测测试集结果
y_pred_svm = svm_model.predict(X_test)
# 评估模型
accuracy_svm = accuracy_score(y_test, y_pred_svm)
precision_svm = precision_score(y_test, y_pred_svm, average='macro')
recall_svm = recall_score(y_test, y_pred_svm, average='macro')
f1_svm = f1_score(y_test, y_pred_svm, average='macro')
accuracy_svm, precision_svm, recall_svm, f1_svm
# 打印结果
print("Accuracy:", accuracy_svm)
print("Precision:", precision_svm)
print("Recall:", recall_svm)
print("F1 Score:", f1_svm)
这里是输出。
这些结果表明,支持向量机模型在乳腺癌数据集上表现非常出色。高准确率、精确率、召回率和F1分数展示了模型在区分良性肿瘤和恶性肿瘤方面的有效性。
在医学诊断中,精确率和召回率之间的平衡尤为重要,因为假阳性和假阴性都会带来严重的后果。
7. 随机森林图片由作者提供
一种通常用于回归和分类的集成学习技术称为随机森林。为了提供更可靠和准确的预测,它构建了许多决策树并将其结合。
随机森林中的每棵树都会进行预测,对于分类任务,模型的预测结果属于获得最多投票的类别。对于回归任务,它会取不同树输出的平均值。
评估指标:- 分类 : 准确率, 精确率, 召回率, F1 分数.
- 回归 : 均方误差 (MSE), R 平方.
我们将使用乳腺癌数据集来应用随机森林算法,以区分肿瘤是良性的还是恶性的。我们将训练随机森林模型,并使用分类指标来评估其性能。
1. 创建并训练随机森林模型:
- 初始化一个随机森林分类器。
- 利用训练数据拟合(训练)模型。
2. 预测:
- 使用训练好的模型预测测试数据的标签。
3. 评估:
- 使用准确率、精确率、召回率和F1分数评估模型在测试数据上的表现。
让我们看看代码。
from sklearn.ensemble import RandomForestClassifier
breast_cancer = load_breast_cancer()
X, y = breast_cancer.data, breast_cancer.target
# 将数据集拆分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建并训练随机森林模型
rf_model = RandomForestClassifier(random_state=42)
rf_model.fit(X_train, y_train)
# 预测测试集的结果
y_pred_rf = rf_model.predict(X_test)
# 评估模型
accuracy_rf = accuracy_score(y_test, y_pred_rf)
precision_rf = precision_score(y_test, y_pred_rf, average='macro')
recall_rf = recall_score(y_test, y_pred_rf, average='macro')
f1_rf = f1_score(y_test, y_pred_rf, average='macro')
# 打印结果
print("Accuracy:", accuracy)
print("Precision:", precision)
print("Recall:", recall)
print("F1 Score:", f1)
这里是输出。
这些结果表明,随机森林模型在乳腺癌数据集上表现优异,所有关键指标得分都很高。
高精确率和召回率表明该模型能够准确地识别良性肿瘤和恶性肿瘤,同时在减少假阳性和假阴性方面也采取了平衡的方法。
8. K-Means 聚类图片由作者提供
K-Means 聚类是一种无监督学习算法,用于将数据分组为“K”个簇。在确定了 k 个中心点后,每个数据点被分配到最近的簇中,目标是使中心点的大小最小化。
算法将数据点分配到一个簇,使得数据点与该簇中心点之间的平方距离之和最小。簇内数据点的同质性随着簇内方差的减小而增加。
评估指标- 惯性 : 样本到最近聚类中心的总平方距离称为惯性。较低的值更好。
- 轮廓分数 : 表示一个项目与其所属聚类的契合度,以及与附近其他聚类的分离度。较高的轮廓分数意味着该项目与其所属聚类契合度高,而与附近聚类的契合度低。轮廓分数的范围从-1到1。
让我们使用Iris数据集进行K均值聚类。任务将是根据鸢尾花的测量值将其分为不同的群组。我们将训练模型,将植物分配到不同的群组,并评估聚类效果。
- 加载 Iris 数据集 :
- Iris数据集包含了鸢尾花的测量数据,包括萼片长度、萼片宽度、花瓣长度和花瓣宽度。该数据集通常用于分类任务,但在这里我们将使用它进行聚类。
2. 应用K均值聚类 :
- 我们初始化一个K均值聚类算法,设置
n_clusters=3
,因为数据集中有三种鸢尾花种类。然而,算法并不知道这些种类;它只是尝试找到将数据分为三个簇的最佳方式。 - 我们将模型拟合到包含四个特征的数据
X
上。K均值算法迭代地将每个数据点分配给三个簇中的一个,依据该数据点到簇中心的距离。
3. 预测聚类 :
- predict 方法用于将 X 中的每个数据点分配到三个聚类中的一个。在 K-Means 中,拟合和预测实际上是同时进行的,但从概念上讲,这一步是将每个数据点标记为一个聚类编号。
4. 评估聚类 :
- 我们使用两个指标来评估聚类:
• 惯性:这是样本到其最近的聚类中心的平方距离之和。它是衡量聚类内部一致性的指标。我们希望惯性越低越好。
• 轮廓分数:这衡量的是对象与其所属聚类的相似性(一致性)与其他聚类的差异性(分离)。轮廓分数的范围从-1到1,其中高值表示对象与其所属聚类匹配良好,而与其他邻近聚类匹配较差。
让我们看看代码。
from sklearn.datasets import load_iris
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
# 加载 Iris 数据集
iris = load_iris()
X = iris.data
# 应用 K-Means 聚类
kmeans = KMeans(n_clusters=3, random_state=42)
kmeans.fit(X)
# 预测每个数据点的聚类
y_pred_clusters = kmeans.predict(X)
# 评估模型
inertia = kmeans.inertia_
silhouette = silhouette_score(X, y_pred_clusters)
print("惯性:", inertia)
print("轮廓系数:", silhouette)
这里是输出。
这些指标表明,K-Means算法在对鸢尾花数据集进行聚类时表现尚可,但在聚类的紧实度和分离度方面仍有改进的空间。
9. 主成分分析(PCA)降维是通过主成分分析(PCA)实现的。它将数据转换为一个新的坐标系统,减少变量的数量,同时尽可能地保留原始数据的变异。
主成分分析(PCA)用于找到最大化数据方差的主要组成部分,或称为轴。第一个主成分捕捉到最大的方差,第二个主成分(与第一个正交)捕捉到次大的方差,以此类推。
评估指标- 解释方差 : 表示每个主成分捕获的数据方差的程度。
- 总解释方差 : 选定主成分解释的累积方差。
乳腺癌数据集,该数据集包含从乳腺肿瘤的细针抽吸(FNA)的数字图像中提取的特征,将被用于主成分分析(PCA)。我们的目标是在保持最大信息量的同时,减少数据集的维度。
以下是我们将遵循的步骤:
- 加载乳腺癌数据集 :
- 乳腺癌数据集由从乳腺肿块的细针抽吸图像中计算出的特征组成。这些特征是图像中可见的细胞核属性。
2. 应用PCA :
- 我们用 n_components=2 初始化 PCA,表示我们希望将数据集降维到二维。这一选择通常是为了可视化目的或作为其他算法的预处理步骤。
- 我们将 PCA 拟合到数据 X 上。在这个过程中,PCA 识别出解释数据中最大方差的轴(主成分)。
3. 数据转换 :
- PCA的transform方法用于对X进行降维处理。这将生成一个新的数据集X_pca,在这个数据集中,每个数据点现在都用两个主成分来表示。
4. 评估PCA变换 :
- 我们通过查看每个主成分的 解释方差 来评估PCA变换。这告诉我们每个主成分捕获了数据总方差的多少。
- 总解释方差 是通过将两个主成分的解释方差相加来计算的。这为我们提供了一个整体度量,表明在降维过程中保留了多少信息。
现在让我们看看代码。
从 sklearn.datasets 导入 load_breast_cancer
从 sklearn.decomposition 导入 PCA
导入 numpy 作为 np
# 加载乳腺癌数据集
breast_cancer = load_breast_cancer()
X = breast_cancer.data
# 应用主成分分析
pca = PCA(n_components=2) # 为了简单起见,将维度减少到2维
pca.fit(X)
# 变换数据
X_pca = pca.transform(X)
# 解释方差
explained_variance = pca.explained_variance_ratio_
# 总解释方差
total_explained_variance = np.sum(explained_variance)
打印("解释方差:", explained_variance)
打印("总解释方差:", total_explained_variance)
让我们看看结果。
让我们来评估结果。
解释方差 :
- 第一主成分:98.20%
- 第二主成分:1.62%
- 总解释方差:99.82%
这些结果表明,通过将数据集缩减为仅两个主成分,我们已经捕获了数据集总方差的大约99.82%。
第一个组件本身解释了大部分方差,这表明它捕获了数据集中大部分重要的信息。
10. 梯度提升算法梯度提升是一种高级机器学习技术。它依次构建多个弱预测模型(通常是决策树)。每个新模型逐步最小化整个系统的损失函数(误差)。
涉及三个组成部分:一个加法模型,该模型通过添加弱学习器来最小化损失函数;一个需要优化的损失函数;以及一个需要生成预测的弱学习器。每一棵新的树都会修正之前树所犯的错误。
评估指标- 对于分类:准确率,精确率,召回率,F1分数。
- 对于回归:均方误差(MSE),R平方。
我们将使用糖尿病数据集来进行梯度提升。我们的目标是根据各种特征预测糖尿病的发展情况。我们将训练一个梯度提升模型并评估其性能。
让我们看看下面我们将要遵循的步骤:
- 加载糖尿病数据集
- 年龄、性别、体质指数、平均血压以及六项血液生化指标是糖尿病数据集包含的特征。目标变量是一年后对疾病发展的定量评估。
2. 创建并训练梯度提升模型 :
- 我们初始化一个梯度提升回归器。梯度提升允许优化任何可微分的损失函数,并以向前、逐步的方式构建加法模型。
- 我们在训练数据上训练(拟合)该模型。在此步骤中,模型学习根据特征预测糖尿病的发展情况。
3. 预测 :
- 我们使用训练好的梯度提升模型来预测测试数据上的疾病进展。这一步涉及将模型应用于未见过的数据,以评估其预测能力。
4. 评估 :
- 模型的性能通过两个关键指标进行评估:
• 均方误差 (MSE) :该指标计算的是误差平方的平均值。这是一个用于评估估计器质量的指标;值越接近零表示质量越高。
• R平方 :该统计量根据模型解释的总结果方差的百分比,给出模型复制观察结果的好坏程度。
这里是一段代码。
从 sklearn.datasets 导入 load_diabetes
从 sklearn.ensemble 导入 GradientBoostingRegressor
从 sklearn.metrics 导入 mean_squared_error, r2_score
# 加载糖尿病数据集
diabetes = load_diabetes()
X, y = diabetes.data, diabetes.target
# 将数据集拆分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建并训练梯度提升模型
gb_model = GradientBoostingRegressor(random_state=42)
gb_model.fit(X_train, y_train)
# 预测测试集结果
y_pred_gb = gb_model.predict(X_test)
# 评估模型
mse_gb = mean_squared_error(y_test, y_pred_gb)
r2_gb = r2_score(y_test, y_pred_gb)
print("均方误差:", mse_gb)
print("R2 分数:", r2_gb)
这里是输出。
这些结果表明,梯度提升模型在预测糖尿病进展方面具有中等水平的准确性。
R平方值为0.45表明,模型解释了目标变量方差中的近45%,对于这样一个复杂的任务来说,这个结果还算不错。
均方误差(MSE)给出了观察到的实际结果与模型预测结果之间平均平方差异的估计。
最终思考在本文中,我们回顾了对于任何初出茅庐的数据科学家而言必不可少的十大机器学习算法。
记住,持续练习并在实际场景中应用是掌握这些算法的关键。
如果你有兴趣进一步了解,可以参考这篇文章,讨论你应该了解的数据科学中的机器学习算法。
共同學習,寫下你的評論
評論加載中...
作者其他優質文章