Python基础教程:sklearn机器学习入门

cd598854643e49c0bd49620ead34f969.jpg


 

1. sklearn基础介绍

sklearn(全名为scikit-learn)是一个建立在NumPy、SciPy和matplotlib等科学计算库的基础上,用于机器学习的Python开源库。它提供了丰富的工具和函数,用于处理各种机器学习任务,包括分类、回归、聚类、降维、模型选择、预处理等。Scikit-Learn支持多种常见的机器学习算法,如线性回归、逻辑回归、决策树、支持向量机、随机森林、K近邻、聚类算法等。此外,它还提供了各种评估指标和模型选择技术,如交叉验证、特征选择、参数调优等,以帮助用户选择和优化合适的模型。

有几个原因使Scikit-Learn成为机器学习领域最受欢迎的库之一:

  • • 简单易用:Scikit-Learn具有一致的API设计,易于上手和使用。

  • • 丰富的文档和示例:Scikit-Learn提供了详细的文档和大量的示例代码,帮助用户快速入门和理解各种机器学习算法。

  • • 高效可扩展:Scikit-Learn使用底层的NumPy和SciPy库进行高效的数值计算,并且可以无缝地与其他Python数据科学库集成。

  • • 健壮稳定:Scikit-Learn是一个经过广泛使用和测试的库,具有良好的代码质量和稳定性。

总而言之,Scikit-Learn提供了一个功能强大、易于使用和扩展的框架,使Python成为机器学习和数据科学领域的首选语言之一。

Scikit-Learn是 Python 最流行的机器学习库之一,它提供了各种工具来实现、评估和探索各种学习算法,用于各种机器学习任务。

基础用法包括:

  • • 数据预处理:探索数据清洗、缩放和编码分类变量等工具。

  • • 训练集和测试集划分:使用Scikit-Learn的train_test_split函数将数据集划分为训练集和测试集。

  • • 模型训练:应用不同的机器学习算法,如线性回归、逻辑回归、决策树和随机森林,对数据集进行训练。

  • • 模型评估:使用准确率、精确率、召回率和F1分数等评估指标评估模型性能。

在本教程中,我们将介绍 Scikit-Learn 的基础知识和一些高级用法,并提供一些实例代码来帮助我们更好地理解。

2. 安装与导入

首先,确保已经正确安装了 Scikit-Learn。您可以使用以下命令进行安装:

pip install scikit-learn
# 安装完成后,使用下面的代码导入 Scikit-Learn
import sklearn

Scikit-Learn中默认携带了Iris(鸢尾花数据集)breast-cancer(乳腺癌数据集),我们可以借助这两个数据集来进行sklearn的入门学习。本文使用Iris进行演示。

3. 数据预处理

在开始机器学习任务之前,通常需要对数据进行预处理。Scikit-Learn 提供了许多用于数据预处理的函数和类。以下是一些常用的数据预处理方法:

3.1 特征缩放:

特征缩放是指将数据集中的特征值进行标准化或归一化的过程。

特征缩放的目的是为了消除特征之间的量纲差异,使得不同特征之间的比较更加合理和准确。

例如,假设我们有一个数据集,其中包含了三个特征A、B和C。特征A的取值范围是0到100,特征B的取值范围是0到10,而特征C的取值范围是0到1000。如果我们不对这些特征进行特征缩放,那么特征A和特征C之间的比较就没有意义,因为它们的量纲不同。

因此,在机器学习中,我们通常会对数据集中的特征进行特征缩放,使得不同特征之间的比较更加合理和准确。

常用的特征缩放方法包括标准化、归一化、最大最小值缩放等。标准化是指将特征值除以其最大值和最小值,使得特征值落在0到1之间。归一化是指将特征值除以其最大值,使得特征值落在0到1之间。这两种方法都可以消除特征之间的量纲差异,使得不同特征之间的比较更加合理和准确。

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler

# 加载鸢尾花数据集
iris = load_iris()
X = iris.data
y = iris.target

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 进行特征缩放(默认缩放为单位方差)
# scaler = StandardScaler()
# X_train = scaler.fit_transform(X_train)
# X_test = scaler.transform(X_test)

# 进行最大最小值缩放
from sklearn.preprocessing import MinMaxScaler
# feature_range:设置缩放后的值范围默认最小0 最大值1,
scaler = MinMaxScaler(feature_range=(0,0.0000000000001))
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)


# 训练机器学习模型
from sklearn.ensemble import RandomForestClassifier
clf = RandomForestClassifier()
clf.fit(X_train, y_train)

# 预测测试集结果
y_pred = clf.predict(X_test)

# 输出模型准确率
print("模型准确率:", clf.score(X_test, y_test))

输出结果:

# 特征缩放
模型准确率: 1.0
# 最大最小值缩放
模型准确率: 0.3

3.2 缺失值处理

当数据集中存在缺失值时,我们需要进行处理以避免影响模型的性能。Scikit-Learn提供了多种填补缺失值的方法,其中最常见的是使用平均值、中位数或众数来填充数值型特征,使用最常见的类别来填充分类特征。

# 进行缺失值处理
from sklearn.preprocessing import Imputer
imputer = Imputer(missing_values='NaN', strategy='mean', fill_value=0)
X_train = imputer.fit_transform(X_train)
X_test = imputer.transform(X_test)

3.3 降维

sklearn提供了多种降维方法,包括主成分分析(PCA)、因子分析(FA)、多维标度(MDS)、主轴检验(Pca)等。

  1. 1. 主成分分析(PCA)

主成分分析(PCA)是一种线性降维方法,它通过计算数据的协方差矩阵,并对其进行特征值分解,从而找到一个或多个主成分,将数据降维到较低维度的空间中。PCA可以消除数据中的噪声和冗余信息,从而使得机器学习模型更加稳定和准确。

  1. 1. 因子分析(FA)

因子分析(FA)是一种非线性降维方法,它通过计算数据的相关矩阵,并对其进行特征值分解,从而找到一组或多组因子,将数据降维到较低维度的空间中。FA可以更好地保留数据中的信息和结构,从而使得机器学习模型更加稳定和准确。

  1. 1. 多维标度(MDS)

多维标度(MDS)是一种非线性降维方法,它通过计算数据的距离矩阵,并对其进行特征值分解,从而找到一组或多组多维标度,将数据降维到较低维度的空间中。MDS可以更好地保留数据中的信息和结构,从而使得机器学习模型更加稳定和准确。

  1. 1. 主轴检验(Pca)

主轴检验(Pca)是一种非线性降维方法,它通过计算数据的协方差矩阵,并对其进行特征值分解,从而找到一组或多组主轴,将数据降维到较低维度的空间中。Pca可以更好地保留数据中的信息和结构,从而使得机器学习模型更加稳定和准确。

以PCA为例:

from sklearn.decomposition import PCA

# 初始化一个 PCA 模型,并指定降到的目标维度
pca = PCA(n_components=2)

X_train = pca.fit_transform(X_train)
X_test = pca.transform(X_test)

3.4 分类变量编码

许多机器学习算法只能处理数值型特征,而无法直接处理分类变量。在这种情况下,我们需要将分类变量进行编码。Scikit-Learn提供了多种编码分类变量的方法,例如独热编码和标签编码。

from sklearn.preprocessing import OneHotEncoder

# 创建一个OneHotEncoder对象

 encoder = OneHotEncoder()

# 假设X是一个包含分类变量的数据集,使用encoder进行独热编码

 X_encoded = encoder.fit_transform(X)

以上示例介绍了Scikit-Learn中基本的数据预处理技术,涵盖了缺失值处理、特征缩放和分类变量编码。根据具体的需求和数据特点,我们可以选择适当的预处理技术来处理数据,并准备好输入机器学习模型。

4. 模型选择与训练

模型选择与训练是机器学习中的关键步骤之一,Scikit-Learn提供了丰富的功能和工具来实现这些任务。

4.1 数据集划分

数据集划分是为了使用一部分数据进行模型训练,另一部分数据进行模型测试。这样可以评估模型在新数据上的性能,并检测是否存在过拟合或欠拟合等问题。Scikit-Learn提供了train_test_split函数来帮助划分数据集。

from sklearn.model_selection import train_test_split

# 假设X是特征矩阵,y是目标变量

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

4.2 建立模型

Scikit-Learn提供了多种机器学习算法的实现,包括线性回归、逻辑回归、决策树、支持向量机等。使用这些算法之前,我们需要创建一个相应的模型对象并设置相应的参数。

from sklearn.linear_model import LinearRegression

# 创建一个线性回归模型对象
model = LinearRegression()

# 使用模型对象进行训练
model.fit(X_train, y_train)

Scikit-Learn 提供了多种用于分类和回归任务的算法和模型。以下是几个常用的算法:

  • • 支持向量机(SVM)

from sklearn.svm import SVC

# 初始化一个支持向量机分类器
clf = SVC()

# 使用分类器进行训练
clf.fit(X_train, y_train)

# 使用分类器进行预测
y_pred = clf.predict(X_test)
  • • 决策树

from sklearn.tree import DecisionTreeClassifier

# 初始化一个决策树分类器
clf = DecisionTreeClassifier()

# 使用分类器进行训练
clf.fit(X_train, y_train)

# 使用分类器进行预测
y_pred = clf.predict(X_test)
  • • 线性回归

from sklearn.linear_model import LinearRegression

# 初始化一个线性回归模型
reg = LinearRegression()

# 使用模型进行训练
reg.fit(X_train, y_train)

# 使用模型进行预测
y_pred = reg.predict(X_test)

4.3 模型训练与调参

模型训练:是指使用训练数据去估计模型的参数,从而使模型能够从数据中学习到模式和规律,Scikit-Learn提供了许多模型训练的方法,如fit函数。

模型调参:是调整模型超参数以达到最佳性能的过程。超参数是在模型训练之前设置的参数,如正则化参数、学习率等。Scikit-Learn提供了多种调参方法,包括GridSearchCV和RandomizedSearchCV等。

from sklearn.model_selection import GridSearchCV
from sklearn.ensemble import RandomForestClassifier
# 创建随机森林分类器对象
model = RandomForestClassifier()
# 定义参数网格
param_grid = {'n_estimators': [100, 200, 300], 'max_depth': [None, 5, 10]}

# 使用GridSearchCV进行模型调参
grid_search = GridSearchCV(model, param_grid, cv=5)
grid_search.fit(X_train, y_train)

# 获取最佳参数和得分
print("最佳参数:", grid_search.best_params_)
print("最佳得分:", grid_search.best_score_)

通过上述步骤,我们可以根据实际问题选择合适的算法并训练模型,还可以利用交叉验证和超参数调优来提高模型的性能。Scikit-Learn为模型选择和训练提供了简洁而强大的工具,使我们能够高效地实现和应用各种机器学习算法。

5. 模型评估与调优

在使用机器学习模型时,必须对模型进行评估和调优。Scikit-Learn 提供了丰富的评估指标和调优方法。

模型评估与选择是在机器学习中非常重要的步骤之一。Scikit-Learn提供了多种方法来评估模型性能、选择合适的模型,并分析模型的偏差和方差。

5.1 评估指标

评估指标用于衡量模型的性能和预测的准确性。对于分类问题,常用的评估指标包括准确率、精确率、召回率、F1分数等。对于回归问题,则使用均方误差、均方根误差、R平方等。Scikit-Learn提供了丰富的评估指标来评估模型的性能。

  from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, mean_squared_error

   # 假设y_true是真实标签,y_pred是模型预测的标签
# 分类模型评估
accuracy = accuracy_score(y_true, y_pred)
precision = precision_score(y_true, y_pred)
recall = recall_score(y_true, y_pred)
f1 = f1_score(y_true, y_pred)
  from sklearn.metrics import 

# 回归模型评估,计算均方误差
mse = mean_squared_error(y_true, y_pred)

5.2 交叉验证

交叉验证是一种评估模型性能的方法,通过将数据集划分为多个训练集和测试集的子集,在不同的子集上训练和评估模型,并对结果进行平均。Scikit-Learn提供了交叉验证的功能,可以帮助我们更可靠地估计模型的性能。

from sklearn.model_selection import cross_val_score
from sklearn.tree import DecisionTreeClassifier

# 创建决策树分类器对象
model = DecisionTreeClassifier()

# 使用交叉验证评估模型性能
scores = cross_val_score(model, X, y, cv=5)

# 输出交叉验证的平均得分
print("平均得分:", scores.mean())

5.3 学习曲线

学习曲线是用于分析模型的偏差和方差,判断模型是否过拟合或欠拟合的工具。通过绘制不同训练集大小下的模型得分曲线,可以观察模型的学习情况。Scikit-Learn提供了plot_learning_curve函数来绘制学习曲线。

import matplotlib.pyplot as plt
from sklearn.model_selection import learning_curve
from sklearn.svm import SVC

# 创建支持向量机分类器对象
model = SVC()

# 绘制学习曲线
train_sizes, train_scores, test_scores = learning_curve(model, X, y, cv=5, train_sizes=np.linspace(0.1, 1.0, 10))

# 绘制平均训练得分和测试得分曲线
plt.plot(train_sizes, np.mean(train_scores, axis=1), 'o-', label='训练集得分')
plt.plot(train_sizes, np.mean(test_scores, axis=1), 'o-', label='测试集得分')
plt.xlabel('训练样本数')
plt.ylabel('得分')
plt.legend(loc='best')
plt.show()

通过评估指标、交叉验证和学习曲线等的分析,我们可以更全面地了解模型的性能和表现,并选择合适的模型。Scikit-Learn提供了强大的工具和方法来帮助我们评估和选择最佳的机器学习模型。

6.模型部署与预测

模型部署与预测是将训练好的模型转化为可用于实际预测的形式的重要步骤,Scikit-Learn提供了保存和加载模型以及用于对新数据进行预测的功能。

6.1 模型保存与加载:

在 Scikit-Learn 中,我们可以使用 pickle 或 joblib 来保存和加载训练好的模型。这些工具使我们能够将模型序列化为文件,并在需要时重新加载。

import pickle

# 假设 model 是训练好的模型
# 保存模型
pickle.dump(model, open('model.pkl', 'wb'))

# 加载模型
loaded_model = pickle.load(open('model.pkl', 'rb'))

from joblib import dump, load
# 保存模型
dump(model, 'model.joblib')
# 加载模型
loaded_model = load('model.joblib')

6.2 新数据预测

在训练好的模型加载后,我们可以使用它来对新数据进行预测。这涉及将新数据转换为与训练数据相同的特征表示,并将其输入到模型中进行预测。

# 假设 X_new 是新的数据样本
predictions = loaded_model.predict(X_new)

使用以上步骤,我们可以将训练好的模型保存到磁盘,并在需要时加载模型进行预测。这使我们能够轻松地部署我们的模型并将其用于实际应用。

7. 总结

对于初学者来说,入门机器学习可能并不难,因为有很多现成的工具和库可以使用。这些工具提供了丰富的接口和方法,使得我们可以快速上手并构建简单的模型。

然而,如果我们想要更深入地理解机器学习算法的原理,并优化模型的性能,就需要一定的数学和统计知识。了解线性代数、概率论和优化算法等基础知识对于理解机器学习算法的原理和调整模型非常重要。

此外,获取高质量的数据也是构建优质模型的关键。优质的数据才能构建出优质的模型,数据的质量和多样性对于机器学习模型的性能有很大的影响。因此,数据预处理、特征工程和数据清洗等技巧也是需要掌握的。

 

欢迎点赞收藏转发,感谢🙏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/48308.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【JavaEE初阶】Servlet (二) Servlet中常用的API

文章目录 HttpServlet核心方法 HttpServletRequest核心方法 HttpServletResponse核心方法 Servlet中常用的API有以下三个: HttpServletHttpServletRequestHttpServletResponse HttpServlet 我们写 Servlet 代码的时候, 首先第一步就是先创建类, 继承自 HttpServlet, 并重写其…

SpringBoot+Prometheus+Grafana实现系统可视化监控

场景 SpringBoot中集成Actuator实现监控系统运行状态: SpringBoot中集成Actuator实现监控系统运行状态_springboot actuator 获取系统运行时长_霸道流氓气质的博客-CSDN博客 基于以上Actuator实现系统监控,还可采用如下方案。 Prometheus Prometheu…

「2024」预备研究生mem-带绝对值的方程高次方程替代降次法

一、带绝对值的方程 二、高次方程替代降次法

用VMware给运行在VMware上的CentOS7生成一个以SSH方式连接VMware上的CentOS7的运行在Windows上的命令行窗口

2023年7月27日,周四早上 目录 一个发现生成方法如果上面的方法连接失败,就采取这个方法 一个发现 今天早上无意间发现VMware可以生成一个以SSH方式连接着CentOS7的Windows命令行窗口, 这样做可以带来一定的便利性 : 方便复制、…

Django模板语法和请求

1、在django关于模板文件加载顺序 创建的django项目下会有一个seeetings.py的文件 如果在seeetings.py 中加了 os.path.join(BASE_DIR,‘templates’),如果是pycharm创建的django项目会加上,就会默认先去根目录找templates目录下的html文件&#xff0c…

时间复杂度函数图像

复杂度一览 f(n)阶函数y1O(1)常数函数ylogxO(logn)对数函数yxO(n)线性函数yxlogxO(nlogn)线性对数函数yx^2O(n^2)二次函数yx^3O(n^3)三次函数y2^xO(2^n)指数函数 对比图一览 对比结果在线预览 参考 时间复杂度比较及时间复杂度对应函数,函数图像

【机器学习】 奇异值分解 (SVD) 和主成分分析 (PCA)

一、说明 在机器学习 (ML) 中,一些最重要的线性代数概念是奇异值分解 (SVD) 和主成分分析 (PCA)。收集到所有原始数据后,我们如何发现结构?例如,通过过去 6 天…

VirtualEnv 20.24.0 发布

导读VirtualEnv 20.24.0 现已发布,VirtualEnv 用于在一台机器上创建多个独立的 Python 运行环境,可隔离项目之间的第三方包依赖,为部署应用提供方便,把开发环境的虚拟环境打包到生产环境即可,不需要在服务器上再折腾一…

郑州Sectigo DV通配符SSL证书

我们在浏览器访问网页时或许不会注意到网站是http还是https链接,但是一定能注意到浏览器给我们展示的“不安全”警告,警告访问者网站未加密,访问网站会有泄露隐私的危险。SSL证书能将网站链接由http转为https,对网站传输数据加密&…

【redis】通过配置文件简述redis的rdb和aof

redis的持久化方式有2种,rdb,即通过快照的方式将全量数据以二进制记录在磁盘中,aof,仅追加文件,将增量的写命令追加在aof文件中。在恢复的时候,rdb要更快,但是会丢失一部分数据。aof丢失数据极少…

7.27 作业

1.闹钟 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);tid1 startTimer(1);//显示时间计时器ui->pushButton_2->setEnabled(false);//设置停止为不可用…

sketch如何在线打开?有没有什么软件可以辅助

Sketch 在线打开的方法有哪些?这个问题和我之前回答过的「Sketch 可以在线编辑吗?」是一样的答案,没有。很遗憾,Sketch 没有在线打开的方法,Sketch 也做不到可以在线编辑。那么,那些广告里出现的设计软件工…

【数据挖掘】PCA/LDA/ICA:A成分分析算法比较

一、说明 在深入研究和比较算法之前,让我们独立回顾一下它们。请注意,本文的目的不是深入解释每种算法,而是比较它们的目标和结果。 如果您想了解更多关于PCA和ZCA之间的区别,请查看我之前基于numpy的帖子: PCA 美白与…

LED芯片 VAS1260IB05E 带内部开关LED驱动器 汽车硬灯带灯条解决方案

VAS1260IB05E深力科LED芯片是一种连续模式电感降压转换器,设计用于从高于LED电压的电压源高效驱动单个或多个串联连接的LED。该设备在5V至60V之间的输入电源下工作,并提供高达1.2A的外部可调输出电流。包括输出开关和高侧输出电流感测电路,该…

Cesium态势标绘专题-进攻箭头(标绘+编辑)

标绘专题介绍:态势标绘专题介绍_总要学点什么的博客-CSDN博客 入口文件:Cesium态势标绘专题-入口_总要学点什么的博客-CSDN博客 辅助文件:Cesium态势标绘专题-辅助文件_总要学点什么的博客-CSDN博客 本专题没有废话,只有代码,代码中涉及到的引入文件方法,从上面三个链…

云计算迎来中场战役,MaaS或将成为弯道超车“新赛点”

科技云报道原创。 没有人能预见未来,但我们可以因循常识,去捕捉技术创新演进的节奏韵脚。 2023年最火的风口莫过于大模型。 2022年底,由美国初创企业OpenAI开发的聊天应用ChatGPT引爆市场,生成式AI成为科技市场热点&#xff0c…

【NLP】使用 Keras 保存和加载深度学习模型

一、说明 训练深度学习模型是一个耗时的过程。您可以在训练期间和训练后保存模型进度。因此,您可以从上次中断的地方继续训练模型,并克服漫长的训练挑战。 在这篇博文中,我们将介绍如何保存模型并使用 Keras 逐步加载它。我们还将探索模型检查…

MCP4725介绍和STM32模拟IC2驱动

一.MCP4725 简单总结为下面几个特点。 1路DAC输出 12位分辨率 I2C 接口(标准,快速,高速支持) 供电电压2.7-5.5 内部EEPROM存储设置 I2C地址可配置(A0)(A1、A2内置,默认为‘00’&…

NAT详解(网络地址转换)

一句话说清楚它是干什么的: 网络地址转换:是指通过专用网络地址转换为公用地址,从而对外隐藏内部管理的IP地址,它使得整个专用网只需要一个全球IP就可以访问互联网,由于专用网IP地址是可以重用的,所以NAT大…

undefined reference to `__android_log_print‘

报错描述 在 Android NDK 相关的工程构建中,出现报错: undefined reference to __android_log_print’ 翻译成 QM 能理解的话: 在链接阶段, 遇到一个需要被链接的符号 __android_log_print, 但是没有在给出的依赖库里面找到 __an…