Python机器学习:Scikit-learn入门指南-程序员宅基地

技术标签: python  架构  机器学习  scikit-learn  Python实践  分布式  

一、Scikit-learn简介

1. Scikit-learn是什么

Scikit-learn 是基于 Python 语言的机器学习工具库,它提供了诸如分类、回归、聚类等常用机器学习任务的 API,同时提供了许多常用的数据预处理工具和数据可视化工具。Scikit-learn 的设计旨在与 NumPy、SciPy 和 matplotlib 工具一起使用,因此可以轻松地与这些库进行集成。

2. Scikit-learn的优势及应用场景

Scikit-learn 提供了丰富成熟且易于使用的算法和工具,适用于各种机器学习任务。Scikit-learn 能够实现从数据预处理到模型选择、训练和评估等完整的机器学习工作流程。它也广泛应用于数据挖掘、预测建模、机器视觉、自然语言处理等领域。

3. Scikit-learn的安装

你可以使用 pip 命令通过以下命令来安装 Scikit-learn:

pip install -U scikit-learn

二、数据准备

1. 数据特征

在这个环节中需要根据你的具体任务首先对数据进行探查和描述,以确定哪些特征和标准可以用于构建模型。你可以使用 Pandas 库来加载数据集到 DataFrame 中,然后通过 head、describe 等方法来了解数据的基本情况:

import pandas as pd

# 导入数据集到 DataFrame
df = pd.read_csv('data.csv')

# 预览数据
print(df.head())

# 描述数据
print(df.describe())

2. 数据清洗

在数据清洗阶段中我们会删除无用的列、处理缺失的数据和异常值等。可以使用 Pandas 库的 drop、fillna 等方法来处理数据:

import pandas as pd

# 导入数据集到 DataFrame
df = pd.read_csv('data.csv')

# 删除无用的列
df = df.drop(['id', 'timestamp'], axis=1)

# 处理缺失的数据
df = df.fillna(df.mean())

# 处理异常值
df = df[(df['value'] >= 0) & (df['value'] <= 100)]

3. 数据划分

在机器学习任务中通常需要将数据集划分为训练集和测试集。你可以使用 Scikit-learn 库来进行数据划分:

from sklearn.model_selection import train_test_split
import pandas as pd

# 导入数据集到 DataFrame
df = pd.read_csv('data.csv')

# 删除无用的列
df = df.drop(['id', 'timestamp'], axis=1)

# 处理缺失的数据
df = df.fillna(df.mean())

# 处理异常值
df = df[(df['value'] >= 0) & (df['value'] <= 100)]

# 划分数据集为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(df.drop('label', axis=1), df['label'], random_state=42)

三、模型训练

1. 模型选择

在模型选择环节中需要根据任务的性质、数据的分布以及性能需求等选择最适合的模型。Scikit-learn 提供了许多常用的机器学习算法,我们可以从中选择适合我们任务的算法,比如:

from sklearn.svm import SVC
from sklearn.neighbors import KNeighborsClassifier
from sklearn.ensemble import RandomForestClassifier

clf1 = SVC()
clf2 = KNeighborsClassifier()
clf3 = RandomForestClassifier()

2. 模型训练

选定好模型后需要使用训练数据来训练模型。Scikit-learn 提供了 fit 方法来进行模型训练:

from sklearn.svm import SVC
import pandas as pd

# 导入数据集到 DataFrame
df = pd.read_csv('data.csv')

# 删除无用的列
df = df.drop(['id', 'timestamp'], axis=1)

# 处理缺失的数据
df = df.fillna(df.mean())

# 处理异常值
df = df[(df['value'] >= 0) & (df['value'] <= 100)]

# 划分数据集为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(df.drop('label', axis=1), df['label'], random_state=42)

# 初始化 SVM 模型
clf = SVC(kernel='linear', C=1)

# 训练模型
clf.fit(X_train, y_train)

3. 模型评估

在模型评估环节中需要使用测试集来评估模型的性能。Scikit-learn 提供了 score 方法和混淆矩阵等评估方法:

from sklearn.metrics import accuracy_score, confusion_matrix

# 用测试集评估模型的性能
y_pred = clf.predict(X_test)
print('Accuracy:', accuracy_score(y_test, y_pred))
print('Confusion Matrix:', confusion_matrix(y_test, y_pred))

四、机器学习算法

1. 监督学习算法

1.1 线性回归

线性回归模型是一种对于线性关系建模的机器学习算法。它可用于预测连续的数值型变量如销售额、股票价格等。下面是一个使用 scikit-learn 库实现线性回归的示例:

from sklearn.linear_model import LinearRegression

# 建立线性回归模型
model = LinearRegression()

# 将数据划分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

# 训练模型
model.fit(X_train, y_train)

# 预测结果
y_pred = model.predict(X_test)

1.2 逻辑回归

逻辑回归模型是一种对于二分类问题建模的机器学习算法。它可用于预测一个事件发生的概率。下面是一个使用 scikit-learn 库实现逻辑回归的示例:

from sklearn.linear_model import LogisticRegression

# 建立逻辑回归模型
model = LogisticRegression()

# 将数据划分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

# 训练模型
model.fit(X_train, y_train)

# 预测结果
y_pred = model.predict(X_test)

1.3 决策树

决策树是一种基于树形结构进行决策的机器学习算法。它可用于分类和回归问题其优点在于易于理解和解释。下面是一个使用 scikit-learn 库实现决策树的示例:

from sklearn.tree import DecisionTreeClassifier

# 建立决策树模型
model = DecisionTreeClassifier(max_depth=2)

# 将数据划分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

# 训练模型
model.fit(X_train, y_train)

# 预测结果
y_pred = model.predict(X_test)

1.4 支持向量机

支持向量机是一种基于边际最大化进行分类的机器学习算法。它可用于分类和回归问题其优点在于高准确性和鲁棒性。下面是一个使用 scikit-learn 库实现支持向量机的示例:

from sklearn.svm import SVC

# 建立支持向量机模型
model = SVC(kernel='linear')

# 将数据划分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

# 训练模型
model.fit(X_train, y_train)

# 预测结果
y_pred = model.predict(X_test)

1.5 随机森林

随机森林是一种基于决策树进行分类和回归的机器学习算法。它可用于处理高维度和大规模数据集。下面是一个使用 scikit-learn 库实现随机森林的示例:

from sklearn.ensemble import RandomForestClassifier

# 建立随机森林模型
model = RandomForestClassifier(n_estimators=100)

# 将数据划分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

# 训练模型
model.fit(X_train, y_train)

# 预测结果
y_pred = model.predict(X_test)

2. 非监督学习算法

2.1 主成分分析

主成分分析是一种用于数据降维的机器学习算法。它通过线性变换将高维度数据转换为低维度数据,并且保留了大多数的变异性。下面是一个使用 scikit-learn 库实现主成分分析的示例:

from sklearn.decomposition import PCA

# 建立主成分分析模型
model = PCA(n_components=2)

# 将数据转化为低维度
X_pca = model.fit_transform(X)

2.2 聚类分析

聚类分析是一种用于将数据集分组的机器学习算法。它可用于发现数据集中的不同模式和群组。下面是一个使用 scikit-learn 库实现聚类分析的示例:

from sklearn.cluster import KMeans

# 建立聚类分析模型
model = KMeans(n_clusters=3)

# 训练模型
model.fit(X)

# 预测结果
y_pred = model.predict(X)

五、实战案例

1. 分类问题

一个使用决策树算法处理鸢尾花分类问题的示例:

from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score

# 导入鸢尾花数据集
iris = load_iris()

# 建立决策树分类模型
model = DecisionTreeClassifier()

# 将数据划分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=0)

# 训练模型
model.fit(X_train, y_train)

# 预测结果
y_pred = model.predict(X_test)

# 计算准确率
print('Accuracy:', accuracy_score(y_test, y_pred))

2. 回归问题

一个使用随机森林算法处理波士顿房价回归问题的示例:

from sklearn.datasets import load_boston
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_absolute_error

# 导入波士顿房价数据集
boston = load_boston()

# 建立随机森林回归模型
model = RandomForestRegressor()

# 将数据划分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(boston.data, boston.target, test_size=0.2, random_state=0)

# 训练模型
model.fit(X_train, y_train)

# 预测结果
y_pred = model.predict(X_test)

# 计算平均绝对误差
print('MAE:', mean_absolute_error(y_test, y_pred))

六、Scikit-learn进阶

1. 流水线

当我们需要处理的数据非常庞大时很容易将数据导入,并挑选和训练不同的模型。在这些过程中可能需要对数据进行预处理,如标准差规范化或者归一化等。Scikit-learn提供了一个Pipeline API,让我们可以将整个过程用代码整合起来,方便调用。

以下是一个流水线示例:

from sklearn.pipeline import Pipeline
from sklearn.feature_selection import SelectKBest
from sklearn.decomposition import PCA
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import GridSearchCV
from sklearn.datasets import load_iris

# 导入鸢尾花数据集
iris = load_iris()

# 建立Pipeline
pipeline = Pipeline([
    ('reduce_dim', PCA()),
    ('classify', LogisticRegression())
])

# 建立参数搜索空间
param_grid = {
    
    'reduce_dim__n_components': [2, 4, 8],
    'classify__C': [0.1, 1, 10]
}

# 在流水线中使用GridSearchCV调整参数
grid = GridSearchCV(pipeline, cv=5, n_jobs=-1, param_grid=param_grid)
grid.fit(iris.data, iris.target)

# 输出最佳参数
print(grid.best_params_)

2. 模型调参

当我们使用Scikit-learn中的某个模型时需要对该模型的超参数进行适当的调整,以获得最佳表现。Scikit-learn中提供了不同的调整方法,如Grid Search和Random Search等。具体使用哪种方法取决于数据的规模和要求。

以下是一个使用Grid Search调整模型的示例:

from sklearn.datasets import load_boston
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import GridSearchCV
from sklearn.metrics import mean_absolute_error

# 导入波士顿房价数据集
boston = load_boston()

# 建立随机森林回归模型
model = RandomForestRegressor()

# 建立参数搜索空间
param_grid = {
    
    'n_estimators': [10, 50, 100],
    'max_depth': [None, 2, 5]
}

# 在模型中使用GridSearchCV调整参数
grid = GridSearchCV(model, cv=5, n_jobs=-1, param_grid=param_grid)
grid.fit(boston.data, boston.target)

# 预测结果
y_pred = grid.predict(boston.data)

# 计算平均绝对误差
print('MAE:', mean_absolute_error(boston.target, y_pred))

3. 特征选择

在实际应用中不是所有的特征都具有相同的重要性。有些特征可能比其他特征更具有预测性。特征选择是一个用于选择最重要的特征的技术。Scikit-learn提供了很多特征选择工具,如SelectKBest、Recursive Feature Elimination和SelectFromModel等。

以下是一个使用SelectKBest选择特征的示例:

from sklearn.datasets import load_boston
from sklearn.feature_selection import SelectKBest, f_regression
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_absolute_error

# 导入波士顿房价数据集
boston = load_boston()

# 选择最重要的5个特征
selector = SelectKBest(f_regression, k=5)

# 将数据集分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(boston.data, boston.target, test_size=0.2, random_state=0)

# 选择特征
X_train_selected = selector.fit_transform(X_train, y_train)
X_test_selected = selector.transform(X_test)

# 建立线性回归模型
model = LinearRegression()

# 训练模型
model.fit(X_train_selected, y_train)

# 预测结果
y_pred = model.predict(X_test_selected)

# 计算平均绝对误差
print('MAE:', mean_absolute_error(y_test, y_pred))

七、小结回顾

1. Scikit-learn的优缺点

Scikit-learn具有以下优点:

  • 它具有用于一般机器学习问题的全面工具包;
  • 几乎所有的算法都可以通过统一的API来使用,使用户能够更好地理解和使用这些算法;
  • 具有大量的文档和示例,使得使用Scikit-learn变得更为简单易用;
  • 它对分布式计算的支持很好,可以轻松地扩展到大规模数据集;
  • Scikit-learn的代码是开源的。

Scikit-learn也有一些缺点:

  • 由于它依赖于Python,因此相对于C++或Java等语言,Scikit-learn运行效率较低;
  • 它尚未完全支持大规模深度学习模型。

2. 未来发展方向

随着人工智能的发展机器学习和数据科学也将取得进一步发展。Scikit-learn将继续是许多人入门机器学习的重要工具之一。在未来,我们可以期待更多的算法被添加到Scikit-learn工具包中,并且它会更好地支持大规模和高性能计算。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u010349629/article/details/130663015

智能推荐

leetcode 172. 阶乘后的零-程序员宅基地

文章浏览阅读63次。题目给定一个整数 n,返回 n! 结果尾数中零的数量。解题思路每个0都是由2 * 5得来的,相当于要求n!分解成质因子后2 * 5的数目,由于n中2的数目肯定是要大于5的数目,所以我们只需要求出n!中5的数目。C++代码class Solution {public: int trailingZeroes(int n) { ...

Day15-【Java SE进阶】IO流(一):File、IO流概述、File文件对象的创建、字节输入输出流FileInputStream FileoutputStream、释放资源。_outputstream释放-程序员宅基地

文章浏览阅读992次,点赞27次,收藏15次。UTF-8是Unicode字符集的一种编码方案,采取可变长编码方案,共分四个长度区:1个字节,2个字节,3个字节,4个字节。文件字节输入流:每次读取多个字节到字节数组中去,返回读取的字节数量,读取完毕会返回-1。注意1:字符编码时使用的字符集,和解码时使用的字符集必须一致,否则会出现乱码。定义一个与文件一样大的字节数组,一次性读取完文件的全部字节。UTF-8字符集:汉字占3个字节,英文、数字占1个字节。GBK字符集:汉字占2个字节,英文、数字占1个字节。GBK规定:汉字的第一个字节的第一位必须是1。_outputstream释放

jeecgboot重新登录_jeecg 登录自动退出-程序员宅基地

文章浏览阅读1.8k次,点赞3次,收藏3次。解决jeecgboot每次登录进去都会弹出请重新登录问题,在utils文件下找到request.js文件注释这段代码即可_jeecg 登录自动退出

数据中心供配电系统负荷计算实例分析-程序员宅基地

文章浏览阅读3.4k次。我国目前普遍采用需要系数法和二项式系数法确定用电设备的负荷,其中需要系数法是国际上普遍采用的确定计算负荷的方法,最为简便;而二项式系数法在确定设备台数较少且各台设备容量差..._数据中心用电负荷统计变压器

HTML5期末大作业:网页制作代码 网站设计——人电影网站(5页) HTML+CSS+JavaScript 学生DW网页设计作业成品 dreamweaver作业静态HTML网页设计模板_网页设计成品百度网盘-程序员宅基地

文章浏览阅读7k次,点赞4次,收藏46次。HTML5期末大作业:网页制作代码 网站设计——人电影网站(5页) HTML+CSS+JavaScript 学生DW网页设计作业成品 dreamweaver作业静态HTML网页设计模板常见网页设计作业题材有 个人、 美食、 公司、 学校、 旅游、 电商、 宠物、 电器、 茶叶、 家居、 酒店、 舞蹈、 动漫、 明星、 服装、 体育、 化妆品、 物流、 环保、 书籍、 婚纱、 军事、 游戏、 节日、 戒烟、 电影、 摄影、 文化、 家乡、 鲜花、 礼品、 汽车、 其他 等网页设计题目, A+水平作业_网页设计成品百度网盘

【Jailhouse 文章】Look Mum, no VM Exits_jailhouse sr-iov-程序员宅基地

文章浏览阅读392次。jailhouse 文章翻译,Look Mum, no VM Exits!_jailhouse sr-iov

随便推点

chatgpt赋能python:Python怎么删除文件中的某一行_python 删除文件特定几行-程序员宅基地

文章浏览阅读751次。本文由chatgpt生成,文章没有在chatgpt生成的基础上进行任何的修改。以上只是chatgpt能力的冰山一角。作为通用的Aigc大模型,只是展现它原本的实力。对于颠覆工作方式的ChatGPT,应该选择拥抱而不是抗拒,未来属于“会用”AI的人。AI职场汇报智能办公文案写作效率提升教程 专注于AI+职场+办公方向。下图是课程的整体大纲下图是AI职场汇报智能办公文案写作效率提升教程中用到的ai工具。_python 删除文件特定几行

Java过滤特殊字符的正则表达式_java正则表达式过滤特殊字符-程序员宅基地

文章浏览阅读2.1k次。【代码】Java过滤特殊字符的正则表达式。_java正则表达式过滤特殊字符

CSS中设置背景的7个属性及简写background注意点_background设置背景图片-程序员宅基地

文章浏览阅读5.7k次,点赞4次,收藏17次。css中背景的设置至关重要,也是一个难点,因为属性众多,对应的属性值也比较多,这里详细的列举了背景相关的7个属性及对应的属性值,并附上演示代码,后期要用的话,可以随时查看,那我们坐稳开车了······1: background-color 设置背景颜色2:background-image来设置背景图片- 语法:background-image:url(相对路径);-可以同时为一个元素指定背景颜色和背景图片,这样背景颜色将会作为背景图片的底色,一般情况下设置背景..._background设置背景图片

Win10 安装系统跳过创建用户,直接启用 Administrator_windows10msoobe进程-程序员宅基地

文章浏览阅读2.6k次,点赞2次,收藏8次。Win10 安装系统跳过创建用户,直接启用 Administrator_windows10msoobe进程

PyCharm2021安装教程-程序员宅基地

文章浏览阅读10w+次,点赞653次,收藏3k次。Windows安装pycharm教程新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入下载安装PyCharm1、进入官网PyCharm的下载地址:http://www.jetbrains.com/pycharm/downl_pycharm2021

《跨境电商——速卖通搜索排名规则解析与SEO技术》一一1.1 初识速卖通的搜索引擎...-程序员宅基地

文章浏览阅读835次。本节书摘来自异步社区出版社《跨境电商——速卖通搜索排名规则解析与SEO技术》一书中的第1章,第1.1节,作者: 冯晓宁,更多章节内容可以访问云栖社区“异步社区”公众号查看。1.1 初识速卖通的搜索引擎1.1.1 初识速卖通搜索作为速卖通卖家都应该知道,速卖通经常被视为“国际版的淘宝”。那么请想一下,普通消费者在淘宝网上购买商品的时候,他的行为应该..._跨境电商 速卖通搜索排名规则解析与seo技术 pdf

推荐文章

热门文章

相关标签