使用Python和scikit-learn开发机器学习模型




使用Python和scikit-learn开发机器学习模型

机器学习是人工智能的一个分支,允许机器在没有明确编程的情况下学习和改进。Scikit-learn是一个流行的Python库,用于机器学习,提供了各种用于预测建模,数据挖掘和数据分析的工具。

在本教程中,我们将探索如何使用scikit-learn库开发机器学习模型。我们将从简要介绍机器学习和scikit-learn库开始。然后,我们将转向主要内容,包括数据预处理,模型选择,模型训练和模型评估。我们将使用一个样本数据集来演示机器学习过程的每个步骤。

经过本教程,您将对如何使用Python和scikit-learn库开发机器学习模型有一个扎实的理解。



入门

在我们开始使用scikit-learn库之前,首先需要使用pip安装该库。

然而,由于scikit-learn库不是内置的,我们首先需要安装它。这可以使用pip软件包管理器来完成。

要安装scikit-learn库,请打开您的终端并键入以下命令:

pip install scikit−learn

这将下载并安装scikit-learn库及其依赖项。安装完成后,我们可以开始使用scikit-learn并利用其模块!

第一步:数据预处理

构建机器学习模型的第一步是准备数据。scikit-learn库提供了各种数据预处理工具,如处理缺失值,编码分类变量和缩放数据。让我们看一些示例:

# Import the necessary libraries
import numpy as np
import pandas as pd
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import LabelEncoder, StandardScaler

# Load the dataset
dataset = pd.read_csv('data.csv')

# Handle missing values
imputer = SimpleImputer(missing_values=np.nan, strategy='mean')
imputer.fit(dataset.iloc[:, 1:3])
dataset.iloc[:, 1:3] = imputer.transform(dataset.iloc[:, 1:3])

# Encode categorical variables
labelencoder = LabelEncoder()
dataset.iloc[:, 0] = labelencoder.fit_transform(dataset.iloc[:, 0])

# Scale the data
scaler = StandardScaler()
dataset.iloc[:, 1:3] = scaler.fit_transform(dataset.iloc[:, 1:3])

在这段代码中,我们首先使用pandas库加载数据集。然后,我们通过用列的平均值替换它们来处理缺失值。接下来,我们对分类变量进行编码,最后,我们对数据进行缩放。

步骤2:模型选择

在我们预处理数据之后,下一步是选择一个合适的模型来解决我们的问题。scikit-learn库提供了各种模型,用于解决不同类型的问题,例如分类、回归和聚类。让我们来看一个选择分类模型的例子:

from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier

# Split the dataset into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(dataset.iloc[:, 1:3], dataset.iloc[:, 0], test_size=0.2, random_state=0)

# Train the K-NN model
classifier = KNeighborsClassifier(n_neighbors=5)
classifier.fit(X_train, y_train)

# Predict the test set results
y_pred = classifier.predict(X_test)

在这段代码中,我们首先使用train_test_split函数将数据集分成训练集和测试集。然后我们使用KNeighborsClassifier类训练一个K−NN(K-最近邻)分类模型。最后,我们使用predict方法预测测试集结果。

步骤3:模型训练

在准备好数据后,我们可以训练我们的机器学习模型。Scikit-learn提供了各种机器学习模型,如决策树、随机森林、支持向量机等。

在这个例子中,我们将在鸢尾花数据集上训练一个决策树分类器。以下是代码:

from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split

# split the data into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# create the model
clf = DecisionTreeClassifier()

# train the model
clf.fit(X_train, y_train)

# test the model
accuracy = clf.score(X_test, y_test)
print("Accuracy:", accuracy)

首先,我们使用 train_test_split 函数将数据分为训练集和测试集。这个函数会随机将数据分为两部分,一部分用于训练,另一部分用于测试。我们通过指定 test_size 参数来确定测试数据的比例。

接下来,我们创建一个 DecisionTreeClassifier 类的实例,并使用训练数据对其进行训练。最后,我们使用测试数据对模型进行测试,并计算模型的准确率。



这段代码的输出结果将是模型在测试数据上的准确率。准确率的大小将取决于用于分割数据的随机状态。

第四步:模型评估

模型训练完毕后,我们需要评估其性能。Scikit-learn 提供了多个评估机器学习模型的指标,包括准确率、精确率、召回率、F1 分数等。

在这个例子中,我们将使用混淆矩阵和分类报告来评估决策树分类器的性能。以下是代码:

from sklearn.metrics import confusion_matrix, classification_report

# make predictions on the test data
y_pred = clf.predict(X_test)

# print the confusion matrix
print("Confusion Matrix:")
print(confusion_matrix(y_test, y_pred))

# print the classification report
print("Classification Report:")
print(classification_report(y_test, y_pred))

首先,我们使用DecisionTreeClassifier实例的predict方法对测试数据进行预测。然后,我们使用sklearn.metrics模块中的confusion_matrix和classification_report函数打印混淆矩阵和分类报告。

混淆矩阵显示真正例、假正例、真反例和假反例的数量。分类报告显示每个类别的准确率、召回率、F1值和支持度。

第五步:模型部署

在训练和评估模型后,我们可以部署它来对新数据进行预测。下面是一个使用训练好的决策树分类器预测新的鸢尾花种类的示例:

# create a new iris flower
new_flower = [[5.1, 3.5, 1.4, 0.2]]

# make a prediction
prediction = clf.predict(new_flower)

# print the prediction
print("Prediction:", iris.target_names[prediction[0]])

我们使用与数据集中的其他花朵相同的四个测量值创建了一朵新的鸢尾花。然后,我们使用训练过的DecisionTreeClassifier实例的predict方法对新数据进行预测。最后,我们打印预测的花的种类。

输出

它将产生以下输出:

Prediction: setosa

结论

在这个教程中,我们学习了如何使用Python和scikit-learn库开发机器学习模型。我们涵盖了数据准备,模型训练,模型评估和模型部署的基础知识。



Python 精选笔记
移除Python中嵌套列表中的所有重复项和排列通过Python Vincent制作柱状图使用Python Matplotlib创建基本甘特图Python Kivy中的相对布局使用Python Tkinter生成随机密码生成器使用Python Tkinter实时货币转换器在循环范围内打印Python列表元素Python - 使用OCR读取PDF内容Python - 使用正则表达式匹配包含g后跟一个或多个e的单词的程序在Python中打印2D列表的对角线Python - 打印字母直到NPython - 列表中的平方乘积Python – 列表中前缀的乘积Python – 前缀和子数组,直到出现false值Python - 字典中的优先键分配Python - 删除给定索引的元素后打印列表Python - 列表中第k列的乘积使用Python删除范围外的所有子列表如何使用Python从字符串列表中删除所有数字?如何使一个Python文件运行另一个文件?如何在Matplotlib中更改X轴和Y轴的范围?如何在Python中获得格式化的日期和时间?Python - PIL 属性Python - 字典中的前缀键匹配Python 列表中最大元素的位置Python - 在字符串中替换多个索引Python - 在字典的每个键上执行操作Python - 特定字符前的前缀提取Python - 根据大小提取前缀通过常数乘以Python字典的值Python 在包含字符串和数字的混合列表中相乘整数Python - 将给定元素移动到列表开头如何相乘Python Tuple的元素?使用Python spacy进行句子分割如何在Python中将元素移动到列表的末尾?Python-将子列表中的每个元素乘以其索引使用Qiskit在Python中的量子电路实现经典的非逻辑门Django中的基于类和基于函数的视图使用'in'和'not in'运算符在Python Pandas中检查DataFrame中是否存在某个值Python - PIL属性Python - 字典中的前缀键匹配Python - 列表中最大元素的位置Python - 在字符串中替换多个索引Python - 对字典中的每个键执行操作Python -指定字符前的前缀提取Python - 根据大小提取前缀通过常数乘以Python字典值Python-在混合字符串和数字列表中相乘整数Python – 将给定元素移动到列表的开头如何乘以Python元组的元素?使用Python spacy执行句子分割如何在Python中将元素移动到列表的末尾?Python-通过索引将子列表中的每个元素相乘使用Qiskit在Python中实现经典非逻辑门的量子电路在Django中的基于类视图和基于函数视图的对比在Python Pandas中使用'in'和'not in'运算符检查DataFrame中是否存在值使用LightFM库在Python中构建推荐引擎使用YOLO算法构建实时物体检测系统使用Python和Scikit-Learn构建客户流失预测的机器学习模型使用Python和WebSocket技术构建实时聊天应用使用Python和BERT构建问答系统使用Python和dlib库构建人脸识别系统使用Python和OpenCV库构建人脸识别系统使用Python和Pandas库构建数据预处理管道使用Pygame模块在Python中构建一个简单的游戏使用Python和ccxt库构建一个加密货币交易机器人使用Python和自然语言工具包(NLTK)构建聊天机器人使用Plan模块在Python中编写crontab文件使用Python和Requests库开发网络爬虫使用Python中的Whoosh库开发文本搜索引擎使用Python和scikit-learn开发机器学习模型使用Python和Plotly Dash创建基于Web的数据可视化仪表板使用Python控制树莓派GPIO引脚使用Python和Pandas库构建股票价格预测模型如何在Python中解析XML并计算特定节点属性的实例?如何在Python中解析本地HTML文件?如何按多列对PySpark DataFrame进行排序?如何在Pygame中移动游戏角色?如何在Python中同时打开两个文件?如何使用Python移动文件夹及其子文件夹的列表?如何使用Python将多个文件夹合并成一个文件夹?如何使用Python将多个Excel文件合并成一个单一文件?如何使用Python Pandas按照共同的键合并多个TSV文件?如何使用PIL将透明的PNG图片与另一张图片合并?Python中嵌套函数是如何工作的?Python中的全局变量和局部变量?在Python函数中如何使用全局变量?如何从Python对象中获取源代码?如何在Python中返回一个函数?如何在Python中安装matplotlib?Python - 分割包含散乱字符的字符串Python - 记录列表XORPython – 向记录的末尾添加数据Python - 键值大于K的记录在Python中垂直打印列表Python - 列表中字符串平均长度Python列表中的交替循环Python程序实现混淆词游戏Python-记录联合Python程序计算列表中元组的重复项Python程序:将字符串的字符转换为相反的大小写Python - 打印给定年份列表中的闰年数量Python - 打印所有子列表中的共同元素Python - 删除嵌套列表中的所有元素如何在Python列表中检查空格?在Python中引发异常到另一个异常Python字符串中的范围复制Python程序计算包含列表的列表中列表的数量修改给定Python列表中的重复值Python - 检查元素是否在指定范围内出现从Python的元组列表中删除所有字符串如何使用Pygame添加颜色呼吸效果?如何在Bokeh中添加颜色条如何在Bokeh中添加颜色选择器?使用Python程序显示带有星边框的数字半菱形图案Python使用ipaddress模块确定给定的IPv4地址是否为保留地址使用ipaddress模块的Python程序来确定给定的IP地址是公网还是私网Python程序通过平方和连接给定数字的奇数位数来创建一个OTPPython程序创建以零为中心的列表Python程序计算字符串中的字符数Python程序将米转换为码,反之亦然Python程序:统计文本文件中的元音、行数和字符数Python程序计算文本文件中的单词数量Python程序,用于计算文本文件中空格的数量将字典的值转换为字符串的Python程序Python程序将浮点数转换为指数Python程序将整数转换为指数Python程序将整数转换为罗马数字将整数列表转换为字符串列表的Python程序Python程序将XML转换为字典Python程序:通过重复键对应的值次数将字典转换为列表将Dict of list转换为CSV的Python程序使用正则表达式统计Python程序中大写字母、小写字母、特殊字符和数字值的个数Python元组的并集Python - 嵌套和混合列表中的类型转换Python - 将列表转换为单值列表的元组如何在Python中打印上标和下标?如何在Python中打印多个参数?如何在Plotly-Python中将图例定位在图表内部?如何使用Pandas绘制时序图表?如何使用SciPy在Python中绘制Ricker曲线?