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

news2024/11/22 18:53:27

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. 总结

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

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

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

 

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

线性表的顺序存储和链式存储—Python数据结构(二)

线性表 定义: 线性表的定义是描述其逻辑结构,而通常会在线性表上进行的查找、插入、删除等操作。 线性表作为一种基本的数据结构类型,在计算机存储器中映象(表示)一般有两种形式,一种是顺序映象,一种是链式映象。 线…

接口漏洞-WebService-wsdl+SOAP-Swagger+HTTP-WebPack

什么是接口? 接口就是位于复杂系统之上并且能简化你的任务,它就像一个中间人让你不需要了解详细的所有细节。像谷歌搜索系统,它提供了搜索接口,简化了你的搜索任务。再像用户登录页面,我们只需要调用我们的登录接口&am…

Jupyter 安装和使用

安装Jupyter 使用pip工具进行安装,在命令提示窗口输入命令如下: pip install jupyter notebook 使用Jupyter 在命令提示窗口输入如下命令,启动浏览器页面: jupyter notebook 修改jupyter的工作路径/存储路径 由于默认工作路…

去括号问题(C++处理)

继http://t.csdn.cn/kIcUT后的文章 题目描述 当老师不容易,尤其是当小学的老师更难:现在的小朋友做作业喜欢滥用括号。 虽然不影响计算结果,但不够美观,容易出错,而且可读性差。但又不能一棒子打死,也许他们就是将来的…

【Linux从入门到精通】进程的控制(进程退出+进程等待)

本篇文章主要讲述的是进程的退出和进程等待。希望本篇文章的内容会对你有所帮助。 文章目录 一、fork创建子进程 1、1 在创建子进程中操作系统的作用 1、2 写时拷贝 二、进程终止 2、1 常见的进程退出 2、2 进程的退出码 2、2、1 运行结果正确实例 2、2、2 运行结果不正确实例…

防御第二天-防火墙演示实验

1.上课思维导图 2.防火墙演示实验 防火墙FW1&#xff1a;原用户名&#xff1a;admin 原密码&#xff1a;Admin123 配地址&#xff1a;<USG6000V1>sy [USG6000V1]int g0/0/0 [USG6000V1-GigabitEthernet0/0/0]ip add 192.168.18.2 24 打开所有权限[USG6000V1-Gig…

C++(一):基本数据类型

基本数据类型 基本内置类型定义变量type field value;type field(value);type field{value};type field {value}; 数学常量及函数静态类型转换 static_cast格式化字符串std::stringstreamstd::string引入三方库 fmt/core.h 字符运算auto 关键字枚举类型数据类型定义别名判断是…

牛客网刷题之链表(一)

链表 NB1 删除链表峰值NB2 牛群排列去重NB3 调整牛群顺序NB4 牛群的重新分组NB5 牛群的重新排列NB6 合并两群能量值&#xff08;合并有序单链表&#xff09;NB7 牛群的能量值&#xff08;单链表相加&#xff09; 以下题全部出自牛客网。 题目题目考察的知识点链表&#xff1a; …

Element Plus 日期选择器

计算开始日期到结束日期的总天数 结构 <el-form-item label"计划开始时间" required prop"StartTime"><el-date-pickertype"date"v-model"ruleForm.StartTime":disabled-date"StartTime"placeholder"计划开始…

pytorch工具——使用pytorch构建一个分类器

目录 分类器任务和数据介绍训练分类器的步骤在GPU上训练模型 分类器任务和数据介绍 训练分类器的步骤 #1 import torch import torchvision import torchvision.transforms as transformstransformtransforms.Compose([transforms.ToTensor(),transforms.Normalize((0.5,0.5,0.…

SpringCloud学习路线(8)—— Docker

一、Docker的开始 &#xff08;一&#xff09;项目部署问题&#xff1a; 依赖关系复杂&#xff0c;容易出现兼容性问题开发、测试、生产环境有差异 &#xff08;二&#xff09;Docker如何解决问题&#xff1f; 1、依赖兼容问题 &#xff08;1&#xff09;将应用的Libs&…

垃圾回收之三色标记法(Tri-color Marking)

关于垃圾回收算法&#xff0c;基本就是那么几种&#xff1a;标记-清除、标记-复制、标记-整理。在此基础上可以增加分代&#xff08;新生代/老年代&#xff09;&#xff0c;每代采取不同的回收算法&#xff0c;以提高整体的分配和回收效率。 无论使用哪种算法&#xff0c;标记…

(已解决)RuntimeError: Java gateway process exited before sending its port number

今天用Pycharm远程使用pysaprk解释器时&#xff0c;跑代码出现了这个错误&#xff1a; RuntimeError: Java gateway process exited before sending its port number 找了好多博客都没解决问题&#xff0c;有说重装spark的&#xff0c;有说本地配Java_home的&#xff0c;后面我…

[C语言刷题]杨氏矩阵、返回型参数

本文包含知识点 杨氏矩阵极其解法函数return多个值的四种方法 题目&#xff1a; 杨氏矩阵 有一个数字矩阵&#xff0c;矩阵的每行从左到右是递增的&#xff0c;矩阵从上到下是递增的&#xff0c;请编写程序在这样的矩阵中查找某个数字是否存在。 要求&#xff1a;时间复杂度小于…

js 在浏览器窗口关闭后还可以不中断网络请求

有个需求&#xff0c;我们需要在用户发送数据过程中&#xff0c;如果用户关闭了网页(包括整个浏览器关闭)&#xff0c;不要中断数据传递 目前XMLHttpRequest对象是不支持的 http服务器 为了测试效果我们用nodejs写了个http服务器代码 文件名为httpServer.js如下&#xff0c;…

获取大疆无人机的飞控记录数据并绘制曲线

机型M350RTK&#xff0c;其飞行记录文件为加密的&#xff0c;我的完善代码如下 gitgithub.com:huashu996/DJFlightRecordParsing2TXT.git 一、下载安装官方的DJIFlightRecord git clone gitgithub.com:dji-sdk/FlightRecordParsingLib.git飞行记录文件在打开【我的电脑】&am…

Windows nvm 安装后webstrom vue项目编译报错,无法识别node

1 nvm安装流程 卸载原先nodejs用管理员权限打开exe安装nvmnvm文件夹和nodejs文件夹 都授权Authenticated Users 完全控制nvm list availablenvm install 16.20.1nvm use 16.20.1输入node和npm检查版本命令&#xff0c;正常显示确认系统变量和用户变量都有nvm 和nodejs 2 bug情…

数学建模-聚类算法 系统(层次)聚类

绝对值距离:网状道路 一般用组间和组内距离 聚类的距离计算如何选取&#xff1a;看结果是否解释的通&#xff0c;选择一种结果解释的通的方法。

【数据挖掘】将NLP技术引入到股市分析

一、说明 在交易中实施的机器学习模型通常根据历史股票价格和其他定量数据进行训练&#xff0c;以预测未来的股票价格。但是&#xff0c;自然语言处理&#xff08;NLP&#xff09;使我们能够分析财务文档&#xff0c;例如10-k表格&#xff0c;以预测股票走势。 二、对自然语言处…

【转载+修改】pytorch中backward求梯度方法的具体解析

原则上&#xff0c;pytorch不支持张量对张量的求导&#xff0c;它只支持标量对张量的求导 我们先看标量对张量求导的情况 import torch xtorch.ones(2,2,requires_gradTrue) print(x) print(x.grad_fn)输出&#xff0c;由于x是被直接创建的&#xff0c;也就是说它是一个叶子节…