Python 机器学习 基础 之 【常用机器学习库】 Matplotlib 数据可视化库
目录
Python 机器学习 基础 之 【常用机器学习库】 Matplotlib 数据可视化库
一、简单介绍
二、Matplotlib 基础
1、安装 Matplotlib
2、导入 Matplotlib
3、基本绘图
3.1 绘制简单折线图
3.2、绘制多条折线
4、常见图表类型
4.1 散点图
4.2 条形图
4.3 直方图
4.4 饼图
5、图表定制
5.1 修改线条和点样式
5.2 添加网格和文本注释
6、子图
7、高级功能
7.1 使用 Pandas 数据绘图
7.2 动态更新图表
三、在机器学习中使用到 Matplotlib 的简单示例
1、数据探索与初步分析
1.1 数据加载与初步分析
1.2 绘制特征分布直方图
2、特征间关系的可视化
2.1 绘制散点图
2.2 绘制相关性热图
3、模型结果的可视化
3.1 绘制预测结果与实际值的对比图
3.2 绘制残差图
4、分类结果的可视化
4.1 绘制混淆矩阵
4.2 绘制ROC曲线
一、简单介绍
Python是一种跨平台的计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。Python是一种解释型脚本语言,可以应用于以下领域: Web 和 Internet开发、科学计算和统计、人工智能、教育、桌面界面开发、软件开发、后端开发、网络爬虫。
Python 机器学习是利用 Python 编程语言中的各种工具和库来实现机器学习算法和技术的过程。Python 是一种功能强大且易于学习和使用的编程语言,因此成为了机器学习领域的首选语言之一。Python 提供了丰富的机器学习库,如Scikit-learn、TensorFlow、Keras、PyTorch等,这些库包含了许多常用的机器学习算法和深度学习框架,使得开发者能够快速实现、测试和部署各种机器学习模型。
Python 机器学习涵盖了许多任务和技术,包括但不限于:
- 监督学习:包括分类、回归等任务。
- 无监督学习:如聚类、降维等。
- 半监督学习:结合了有监督和无监督学习的技术。
- 强化学习:通过与环境的交互学习来优化决策策略。
- 深度学习:利用深度神经网络进行学习和预测。
通过 Python 进行机器学习,开发者可以利用其丰富的工具和库来处理数据、构建模型、评估模型性能,并将模型部署到实际应用中。Python 的易用性和庞大的社区支持使得机器学习在各个领域都得到了广泛的应用和发展。
二、Matplotlib 基础
Matplotlib 是一个强大的 Python 数据可视化库,广泛用于生成各种静态、动态和交互式图表。它是机器学习中进行数据可视化和分析的重要工具之一。本文将介绍 Matplotlib 的基本概念和操作。
1、安装 Matplotlib
在开始之前,请确保已安装 Matplotlib。您可以使用以下命令安装:
pip install matplotlib
2、导入 Matplotlib
在使用 Matplotlib 之前,需要先导入它。通常我们会用 plt
作为 Matplotlib 的别名:
import matplotlib.pyplot as plt
3、基本绘图
3.1 绘制简单折线图
import matplotlib.pyplot as plt# 准备数据
x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]# 创建折线图
plt.plot(x, y)# 添加标题和标签
plt.title('Simple Line Plot')
plt.xlabel('X Axis')
plt.ylabel('Y Axis')# 保存图表
plt.savefig('Images/savedImage.png', bbox_inches='tight')
# 打印结果:图表已保存至 'Images/savedImage.png'# 显示图表
plt.show()
# 打印结果:图表已显示在屏幕上
在实际使用中,plt.plot(x, y)
会创建一个折线图,显示x和y数据的关系。plt.title
, plt.xlabel
, 和 plt.ylabel
分别添加图表的标题和X、Y轴的标签。
plt.savefig
将图表保存到文件中,路径为 'Images/savedImage.png'。请确保 'Images' 文件夹存在于您的工作目录中,否则保存操作可能会失败。bbox_inches='tight'
参数确保所有图表内容都被包含在保存的图像中。
plt.show()
会显示图表。在某些环境(如Jupyter笔记本)中,图表可能会直接显示在代码旁边,而在其他环境(如Python脚本运行)中,可能会打开一个窗口来显示图表。
由于图表是视觉元素,无法以文本形式打印其内容,但您可以使用 plt.savefig
保存图表并使用图像查看器来查看它。
3.2、绘制多条折线
import matplotlib.pyplot as plt# 准备数据
x = [1, 2, 3, 4, 5]
y1 = [2, 3, 5, 7, 11]
y2 = [1, 4, 6, 8, 10]# 创建多条折线图
plt.plot(x, y1, label='Line 1') # 绘制第一条折线图
plt.plot(x, y2, label='Line 2') # 绘制第二条折线图# 添加标题和标签
plt.title('Multiple Line Plot') # 添加图表标题
plt.xlabel('X Axis') # 添加X轴标签
plt.ylabel('Y Axis') # 添加Y轴标签# 添加图例
plt.legend() # 显示图例# 保存图表
plt.savefig('Images/savedImage.png', bbox_inches='tight') # 保存图表到文件
# 打印结果:图表已保存至 'Images/savedImage.png'# 显示图表
plt.show() # 显示图表
# 打印结果:图表已显示在屏幕上
请注意,实际的图表显示效果取决于您的具体数据和执行环境。上述代码中的注释和输出结果仅为示例。
plt.plot(x, y1, label='Line 1')
和plt.plot(x, y2, label='Line 2')
分别绘制了两条折线图,并分别标记为 'Line 1' 和 'Line 2'。plt.legend()
显示了图例,根据标签 'Line 1' 和 'Line 2' 区分不同的折线。plt.savefig
将图表保存到文件中,路径为 'Images/savedImage.png'。请确保 'Images' 文件夹存在于您的工作目录中,否则保存操作可能会失败。plt.show()
会显示图表,您可以在屏幕上看到绘制的折线图和图例。
由于图表是视觉元素,无法以文本形式打印其内容,但您可以使用 plt.savefig
保存图表并使用图像查看器来查看它。如果您希望在控制台中打印某些信息,您可以使用 print()
函数来实现。
4、常见图表类型
4.1 散点图
import matplotlib.pyplot as plt# 准备数据
x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]# 创建散点图
plt.scatter(x, y) # 使用给定的x和y数据点创建散点图# 添加标题和标签
plt.title('Scatter Plot') # 添加图表标题为 'Scatter Plot'
plt.xlabel('X Axis') # 添加X轴标签
plt.ylabel('Y Axis') # 添加Y轴标签# 保存图表
plt.savefig('Images/savedImage.png', bbox_inches='tight') # 将图表保存到 'Images/savedImage.png'
# 打印结果:图表已保存至 'Images/savedImage.png'# 显示图表
plt.show() # 显示图表
# 打印结果:图表已显示在屏幕上
请注意,实际的图表显示效果取决于您的具体数据和执行环境。上述代码中的注释和输出结果仅为示例。
plt.scatter(x, y)
创建了一个散点图,其中x和y是数据点的坐标。plt.title
,plt.xlabel
, 和plt.ylabel
分别添加了图表的标题和X、Y轴的标签。plt.savefig
将图表保存到文件中,路径为 'Images/savedImage.png'。请确保 'Images' 文件夹存在于您的工作目录中,否则保存操作可能会失败。bbox_inches='tight'
参数确保所有图表内容都被包含在保存的图像中。plt.show()
会显示图表,您可以在屏幕上看到绘制的散点图。
由于图表是视觉元素,无法以文本形式打印其内容,但您可以使用 plt.savefig
保存图表并使用图像查看器来查看它。如果您希望在控制台中打印某些信息,您可以使用 print()
函数来实现。
4.2 条形图
import matplotlib.pyplot as plt# 准备数据
categories = ['A', 'B', 'C', 'D', 'E']
values = [3, 7, 2, 5, 6]# 创建条形图
plt.bar(categories, values) # 创建一个条形图,categories作为x轴的标签,values作为条形的高度# 添加标题和标签
plt.title('Bar Chart') # 添加图表标题为 'Bar Chart'
plt.xlabel('Categories') # 添加X轴标签为 'Categories'
plt.ylabel('Values') # 添加Y轴标签为 'Values'# 保存图表
plt.savefig('Images/savedImage.png', bbox_inches='tight') # 将图表保存到 'Images/savedImage.png'
# 打印结果:图表已保存至 'Images/savedImage.png'# 显示图表
plt.show() # 显示图表
# 打印结果:图表已显示在屏幕上
请注意,实际的图表显示效果取决于您的具体数据和执行环境。上述代码中的注释和输出结果仅为示例。
plt.bar(categories, values)
创建了一个条形图,其中categories
作为x轴的标签,values
作为对应的条形高度。plt.title
,plt.xlabel
, 和plt.ylabel
分别添加了图表的标题和X、Y轴的标签。plt.savefig
将图表保存到文件中,路径为 'Images/savedImage.png'。请确保 'Images' 文件夹存在于您的工作目录中,否则保存操作可能会失败。bbox_inches='tight'
参数确保所有图表内容都被包含在保存的图像中。plt.show()
会显示图表,您可以在屏幕上看到绘制的条形图。
4.3 直方图
import matplotlib.pyplot as plt
import numpy as np# 生成数据
data = np.random.randn(1000) # 生成一个包含1000个随机样本的数组,样本来自标准正态分布# 创建直方图
plt.hist(data, bins=30, edgecolor='black') # 创建直方图,bins=30表示将数据分成30个区间# edgecolor='black'表示直方图边缘颜色为黑色# 添加标题和标签
plt.title('Histogram') # 添加图表标题为 'Histogram'
plt.xlabel('Value') # 添加X轴标签为 'Value'
plt.ylabel('Frequency') # 添加Y轴标签为 'Frequency'# 保存图表
plt.savefig('Images/savedImage.png', bbox_inches='tight') # 将图表保存到 'Images/savedImage.png'
# 打印结果:图表已保存至 'Images/savedImage.png'# 显示图表
plt.show() # 显示图表
# 打印结果:图表已显示在屏幕上
请注意,实际的图表显示效果取决于您的具体数据和执行环境。上述代码中的注释和输出结果仅为示例。
np.random.randn(1000)
生成了一个包含1000个随机样本的数组,这些样本来自标准正态分布。plt.hist
创建了一个直方图,bins=30
表示将数据分成30个区间,edgecolor='black'
使直方图的边缘颜色为黑色。plt.title
,plt.xlabel
, 和plt.ylabel
分别添加了图表的标题和X、Y轴的标签。plt.savefig
将图表保存到文件中,路径为 'Images/savedImage.png'。请确保 'Images' 文件夹存在于您的工作目录中,否则保存操作可能会失败。bbox_inches='tight'
参数确保所有图表内容都被包含在保存的图像中。plt.show()
会显示图表,您可以在屏幕上看到绘制的直方图。
4.4 饼图
import matplotlib.pyplot as plt# 准备数据
labels = ['A', 'B', 'C', 'D']
sizes = [15, 30, 45, 10]# 创建饼图
plt.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=140) # 创建饼图,自动百分比格式化,起始角度为140度# 添加标题
plt.title('Pie Chart') # 添加图表标题为 'Pie Chart'# 保存图表
plt.savefig('Images/savedImage.png', bbox_inches='tight') # 将图表保存到 'Images/savedImage.png'
# 打印结果:图表已保存至 'Images/savedImage.png'# 显示图表
plt.show() # 显示图表
# 打印结果:图表已显示在屏幕上
请注意,实际的图表显示效果取决于您的具体数据和执行环境。上述代码中的注释和输出结果仅为示例。
plt.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=140)
创建了一个饼图,sizes
定义了每个扇区的大小,labels
提供了每个扇区的标签,autopct='%1.1f%%'
指定了扇区内百分比的格式,startangle=140
设置了饼图的起始绘制角度。plt.title('Pie Chart')
添加了图表的标题。plt.savefig
将图表保存到文件中,路径为 'Images/savedImage.png'。请确保 'Images' 文件夹存在于您的工作目录中,否则保存操作可能会失败。bbox_inches='tight'
参数确保所有图表内容都被包含在保存的图像中。plt.show()
会显示图表,您可以在屏幕上看到绘制的饼图。
5、图表定制
5.1 修改线条和点样式
import matplotlib.pyplot as plt# 准备数据
x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]# 创建折线图,设置线条和点样式
plt.plot(x, y, color='red', linestyle='--', marker='o', markersize=8) # 绘制折线图,颜色为红色,虚线样式,圆圈标记点,标记大小为8# 添加标题和标签
plt.title('Customized Line Plot') # 添加图表标题为 'Customized Line Plot'
plt.xlabel('X Axis') # 添加X轴标签
plt.ylabel('Y Axis') # 添加Y轴标签# 保存图表
plt.savefig('Images/savedImage.png', bbox_inches='tight') # 将图表保存到 'Images/savedImage.png'
# 打印结果:图表已保存至 'Images/savedImage.png'# 显示图表
plt.show() # 显示图表
# 打印结果:图表已显示在屏幕上
请注意,实际的图表显示效果取决于您的具体数据和执行环境。上述代码中的注释和输出结果仅为示例。
plt.plot(x, y, color='red', linestyle='--', marker='o', markersize=8)
创建了一个折线图,其中设置了线条颜色为红色,线型为虚线,数据点标记为圆圈,标记大小为8。plt.title
,plt.xlabel
, 和plt.ylabel
分别添加了图表的标题和X、Y轴的标签。plt.savefig
将图表保存到文件中,路径为 'Images/savedImage.png'。请确保 'Images' 文件夹存在于您的工作目录中,否则保存操作可能会失败。bbox_inches='tight'
参数确保所有图表内容都被包含在保存的图像中。plt.show()
会显示图表,您可以在屏幕上看到绘制的折线图。
5.2 添加网格和文本注释
import matplotlib.pyplot as plt# 准备数据
x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]# 创建折线图
plt.plot(x, y)# 添加网格
plt.grid(True) # 为图表添加网格# 添加文本注释
for i in range(len(x)):plt.text(x[i], y[i], f'({x[i]},{y[i]})') # 在每个数据点上添加文本注释,显示点的坐标# 添加标题和标签
plt.title('Line Plot with Grid and Annotations') # 添加图表标题
plt.xlabel('X Axis') # 添加X轴标签
plt.ylabel('Y Axis') # 添加Y轴标签# 保存图表
plt.savefig('Images/savedImage.png', bbox_inches='tight') # 将图表保存到 'Images/savedImage.png'
# 打印结果:图表已保存至 'Images/savedImage.png'# 显示图表
plt.show() # 显示图表
# 打印结果:图表已显示在屏幕上
请注意,实际的图表显示效果取决于您的具体数据和执行环境。上述代码中的注释和输出结果仅为示例。
plt.plot(x, y)
创建了一个折线图。plt.grid(True)
为图表添加了网格。plt.text(x[i], y[i], f'({x[i]},{y[i]})')
在每个数据点上添加了文本注释,显示了点的坐标。plt.title
,plt.xlabel
, 和plt.ylabel
分别添加了图表的标题和X、Y轴的标签。plt.savefig
将图表保存到文件中,路径为 'Images/savedImage.png'。请确保 'Images' 文件夹存在于您的工作目录中,否则保存操作可能会失败。bbox_inches='tight'
参数确保所有图表内容都被包含在保存的图像中。plt.show()
会显示图表,您可以在屏幕上看到绘制的折线图、网格和文本注释。
6、子图
使用子图可以在同一个图表中展示多个图形。
import matplotlib.pyplot as plt# 准备数据
x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]# 创建2x1子图
fig, axs = plt.subplots(2, 1) # 创建一个2行1列的子图布局# 第一子图
axs[0].plot(x, y, 'r') # 在第一个子图上绘制红色折线图
axs[0].set_title('Subplot 1') # 设置第一个子图的标题# 第二子图
axs[1].scatter(x, y) # 在第二个子图上绘制散点图
axs[1].set_title('Subplot 2') # 设置第二个子图的标题# 调整子图布局
plt.tight_layout() # 调整子图参数,使之填充整个图像区域# 保存图表
plt.savefig('Images/savedImage.png', bbox_inches='tight') # 将图表保存到 'Images/savedImage.png'
# 打印结果:图表已保存至 'Images/savedImage.png'# 显示图表
plt.show() # 显示图表
# 打印结果:图表已显示在屏幕上
请注意,实际的图表显示效果取决于您的具体数据和执行环境。上述代码中的注释和输出结果仅为示例。
plt.subplots(2, 1)
创建了一个2行1列的子图布局。axs[0].plot(x, y, 'r')
在第一个子图上绘制了一个红色折线图。axs[0].set_title('Subplot 1')
设置了第一个子图的标题。axs[1].scatter(x, y)
在第二个子图上绘制了一个散点图。axs[1].set_title('Subplot 2')
设置了第二个子图的标题。plt.tight_layout()
调整了子图参数,使之填充整个图像区域。plt.savefig
将图表保存到文件中,路径为 'Images/savedImage.png'。请确保 'Images' 文件夹存在于您的工作目录中,否则保存操作可能会失败。bbox_inches='tight'
参数确保所有图表内容都被包含在保存的图像中。plt.show()
会显示图表,您可以在屏幕上看到两个子图。
7、高级功能
7.1 使用 Pandas 数据绘图
Pandas 集成了 Matplotlib,可以方便地对 DataFrame 和 Series 进行绘图。
import matplotlib.pyplot as plt
import pandas as pd# 创建 DataFrame
data = {'A': [1, 2, 3, 4, 5],'B': [2, 3, 5, 7, 11]
}
df = pd.DataFrame(data)# 使用 Pandas 绘图
df.plot(kind='line', x='A', y='B', title='Pandas Line Plot') # 使用Pandas绘图功能创建折线图
# 这里没有打印语句,但图表已经创建并显示了# 保存图表
plt.savefig('Images/savedImage.png', bbox_inches='tight') # 将图表保存到 'Images/savedImage.png'
# 打印结果:图表已保存至 'Images/savedImage.png'# 显示图表
plt.show() # 显示图表
# 打印结果:图表已显示在屏幕上
请注意,实际的图表显示效果取决于您的具体数据和执行环境。上述代码中的注释和输出结果仅为示例。
pd.DataFrame(data)
创建了一个包含两列 'A' 和 'B' 的 DataFrame。df.plot(kind='line', x='A', y='B', title='Pandas Line Plot')
使用Pandas的绘图功能创建了一个折线图,指定了图表类型为折线图(kind='line'
),x轴为 'A' 列,y轴为 'B' 列,并设置了图表标题。plt.savefig
将图表保存到文件中,路径为 'Images/savedImage.png'。请确保 'Images' 文件夹存在于您的工作目录中,否则保存操作可能会失败。bbox_inches='tight'
参数确保所有图表内容都被包含在保存的图像中。plt.show()
会显示图表,您可以在屏幕上看到绘制的折线图。
7.2 动态更新图表
可以使用 FuncAnimation
创建动态更新的图表。
代码示例中,创建了一个动态变化的正弦波动画,并尝试将其保存为图片。然而,FuncAnimation
创建的是一个动画对象,而不是一个静态图像,所以直接使用 plt.savefig()
只会保存动画的最后一帧,而不是整个动画序列。
为了保存整个动画,您需要使用额外的库,比如 ffmpeg
或 imagemagick
,来将动画帧保存为视频或GIF。
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import numpy as np# 初始化数据
x = np.arange(0, 2*np.pi, 0.01)
fig, ax = plt.subplots()
line, = ax.plot(x, np.sin(x))# 更新函数
def update(frame):line.set_ydata(np.sin(x + frame/10.0))return line,# 创建动画
ani = animation.FuncAnimation(fig, update, frames=100, blit=True)# 保存图表
plt.savefig('Images/savedImage.png', bbox_inches='tight')
# 打印结果:由于FuncAnimation创建的是动画,直接保存只会保存最后一帧图像
# 打印结果:图表最后一帧已保存至 'Images/savedImage.png'# 显示动画
plt.show()
# 打印结果:动画已显示在屏幕上
请注意,实际的图表显示效果取决于您的具体数据和执行环境。上述代码中的注释和输出结果仅为示例。
animation.FuncAnimation(fig, update, frames=100, blit=True)
创建了一个动画,其中update
函数定义了每一帧的更新逻辑,frames=100
指定了动画帧的数量。plt.savefig()
将图表的最后一帧保存到文件中,路径为 'Images/savedImage.png'。请确保 'Images' 文件夹存在于您的工作目录中,否则保存操作可能会失败。plt.show()
会显示动画,您可以在屏幕上看到动态变化的正弦波。
以上是 Matplotlib 的一些基础知识和操作。掌握这些内容可以帮助您更好地进行数据可视化和机器学习任务。通过不断实践,您会发现 Matplotlib 是一个非常强大且灵活的工具。
三、在机器学习中使用到 Matplotlib 的简单示例
下面是一些在机器学习中使用Matplotlib进行数据可视化的简单示例。这些示例展示了Matplotlib在数据探索、特征分析和结果可视化中的功能和作用。
1、数据探索与初步分析
1.1 数据加载与初步分析
我们先加载一个数据集,并进行初步的数据探索。
import pandas as pd# 创建数据字典
data = {'feature1': [1.1, 2.3, 3.5, 4.7, 5.9, 6.1, 7.3, 8.5, 9.7, 10.9],'feature2': [2.2, 3.4, 4.6, 5.8, 6.0, 7.2, 8.4, 9.6, 10.8, 11.0],'target': [1, 0, 1, 0, 1, 0, 1, 0, 1, 0]
}# 创建 DataFrame
df = pd.DataFrame(data)savedDatasetCsvFilePath = "data/dataset.csv"# 保存为 CSV 文件
df.to_csv(savedDatasetCsvFilePath, index=False)
# 打印结果:DataFrame 已保存至 CSV 文件,路径为 "data/dataset.csv"# 从CSV文件加载数据
df = pd.read_csv(savedDatasetCsvFilePath)# 查看前几行数据
print(df.head())
# 输出结果:
# feature1 feature2 target
# 0 1.1 2.2 1
# 1 2.3 3.4 0
# 2 3.5 4.6 1
# 3 4.7 5.8 0
# 4 5.9 6.0 1# 查看数据基本信息
print(df.info())
# 输出结果:将显示 DataFrame 的基本信息,包括每列的名称、数据类型、非空值数量等。
# <class 'pandas.core.frame.DataFrame'>
# RangeIndex: 10 entries, 0 to 9
# Data columns (total 3 columns):
# # Column Non-Null Count Dtype
# --- ------ -------------- -----
# 0 feature1 10 non-null float64
# 1 feature2 10 non-null float64
# 2 target 10 non-null int64
# dtypes: float64(2), int64(1)
# memory usage: 368.0 bytes
# None# 查看描述性统计
print(df.describe())
# 输出结果:
# feature1 feature2 target
# count 10.000000 10.000000 10.000000
# mean 6.000000 6.900000 0.500000
# std 3.185034 3.042294 0.527046
# min 1.100000 2.200000 0.000000
# 25% 3.800000 4.900000 0.000000
# 50% 6.000000 6.600000 0.500000
# 75% 8.200000 9.300000 1.000000
# max 10.900000 11.000000 1.000000
请注意,实际输出结果会根据 df
中的数据而有所不同。df.to_csv()
将 DataFrame 保存到 CSV 文件中,df.read_csv()
从 CSV 文件中加载数据。df.head()
打印 DataFrame 的前五行数据,df.info()
提供了 DataFrame 的详细概览,包括每列的数据类型和非空值数量等信息。df.describe()
给出了数值型列的描述性统计信息,包括计数、均值、标准差、最小值、第25百分位数、中位数、第75百分位数和最大值。
1.2 绘制特征分布直方图
我们使用Matplotlib绘制特征的直方图,以查看数据分布情况。
import pandas as pd
import matplotlib.pyplot as plt# 创建数据字典
data = {'feature1': [1.1, 2.3, 3.5, 4.7, 5.9, 6.1, 7.3, 8.5, 9.7, 10.9],'feature2': [2.2, 3.4, 4.6, 5.8, 6.0, 7.2, 8.4, 9.6, 10.8, 11.0],'target': [1, 0, 1, 0, 1, 0, 1, 0, 1, 0]
}# 创建 DataFrame
df = pd.DataFrame(data)savedDatasetCsvFilePath = "data/dataset.csv"# 保存为 CSV 文件
df.to_csv(savedDatasetCsvFilePath, index=False)
print(f"DataFrame 已保存至 CSV 文件,路径为 {savedDatasetCsvFilePath}") # 打印保存结果# 从CSV文件加载数据
df = pd.read_csv(savedDatasetCsvFilePath)# 绘制特征的直方图 (例如 feature1)
df['feature1'].hist(bins=30, edgecolor='black')
plt.title('Feature Distribution')
plt.xlabel('Feature Value')
plt.ylabel('Frequency')# 保存图表
plt.savefig('Images/savedImage.png', bbox_inches='tight')
# 打印结果:图表已保存至 'Images/savedImage.png'plt.show() # 显示图表
# 打印结果:图表已显示在屏幕上
请注意,实际的图表显示效果和文件保存结果取决于您的具体数据和执行环境。上述代码中的注释和输出结果仅为示例。
df.to_csv()
将 DataFrame 保存到 CSV 文件中,并打印出保存的路径。df.read_csv()
从 CSV 文件中加载数据。df['feature1'].hist()
绘制了 'feature1' 列的直方图。plt.savefig()
将图表保存到文件中,路径为 'Images/savedImage.png'。请确保 'Images' 文件夹存在于您的工作目录中,否则保存操作可能会失败。plt.show()
显示图表。
2、特征间关系的可视化
2.1 绘制散点图
绘制两个特征之间的散点图,以查看它们之间的关系。
import pandas as pd
import matplotlib.pyplot as plt# 创建数据字典
data = {'feature1': [1.1, 2.3, 3.5, 4.7, 5.9, 6.1, 7.3, 8.5, 9.7, 10.9],'feature2': [2.2, 3.4, 4.6, 5.8, 6.0, 7.2, 8.4, 9.6, 10.8, 11.0],'target': [1, 0, 1, 0, 1, 0, 1, 0, 1, 0]
}# 创建 DataFrame
df = pd.DataFrame(data)savedDatasetCsvFilePath = "data/dataset.csv"# 保存为 CSV 文件
df.to_csv(savedDatasetCsvFilePath, index=False)
print(f"DataFrame 已保存至 CSV 文件,路径为 {savedDatasetCsvFilePath}") # 打印保存结果# 从CSV文件加载数据
df = pd.read_csv(savedDatasetCsvFilePath)# 绘制散点图
plt.scatter(df['feature1'], df['feature2'])
plt.title('Feature1 vs Feature2')
plt.xlabel('Feature1')
plt.ylabel('Feature2')# 保存图表
plt.savefig('Images/savedImage.png', bbox_inches='tight')
# 打印结果:图表已保存至 'Images/savedImage.png'plt.show() # 显示图表
# 打印结果:图表已显示在屏幕上
请注意,实际的图表显示效果和文件保存结果取决于您的具体数据和执行环境。上述代码中的注释和输出结果仅为示例。
df.to_csv()
将 DataFrame 保存到 CSV 文件中,并打印出保存的路径。df.read_csv()
从 CSV 文件中加载数据。plt.scatter()
绘制了 'feature1' 和 'feature2' 之间的散点图。plt.savefig()
将图表保存到文件中,路径为 'Images/savedImage.png'。请确保 'Images' 文件夹存在于您的工作目录中,否则保存操作可能会失败。plt.show()
显示图表。
2.2 绘制相关性热图
使用Seaborn绘制相关性矩阵的热图,以查看特征之间的相关性。
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns# 创建数据字典
data = {'feature1': [1.1, 2.3, 3.5, 4.7, 5.9, 6.1, 7.3, 8.5, 9.7, 10.9],'feature2': [2.2, 3.4, 4.6, 5.8, 6.0, 7.2, 8.4, 9.6, 10.8, 11.0],'target': [1, 0, 1, 0, 1, 0, 1, 0, 1, 0]
}# 创建 DataFrame
df = pd.DataFrame(data)savedDatasetCsvFilePath = "data/dataset.csv"# 保存为 CSV 文件
df.to_csv(savedDatasetCsvFilePath, index=False)
print(f"DataFrame 已保存至 CSV 文件,路径为 {savedDatasetCsvFilePath}") # 打印保存结果# 从CSV文件加载数据
df = pd.read_csv(savedDatasetCsvFilePath)# 计算相关性矩阵
corr_matrix = df.corr()# 绘制热图
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm')
plt.title('Correlation Matrix Heatmap')# 保存图表
plt.savefig('Images/savedImage.png', bbox_inches='tight')
# 打印结果:热图已保存至 'Images/savedImage.png'plt.show() # 显示热图
# 打印结果:热图已显示在屏幕上
请注意,实际的图表显示效果和文件保存结果取决于您的具体数据和执行环境。上述代码中的注释和输出结果仅为示例。
df.to_csv()
将 DataFrame 保存到 CSV 文件中,并打印出保存的路径。df.read_csv()
从 CSV 文件中加载数据。df.corr()
计算了 DataFrame 列之间的相关性矩阵。sns.heatmap()
绘制了相关性矩阵的热图,annot=True
表示在每个格子内显示相关性数值,cmap='coolwarm'
指定了颜色映射。plt.savefig()
将热图保存到文件中,路径为 'Images/savedImage.png'。请确保 'Images' 文件夹存在于您的工作目录中,否则保存操作可能会失败。plt.show()
显示热图。
3、模型结果的可视化
3.1 绘制预测结果与实际值的对比图
我们训练一个简单的线性回归模型,并绘制预测结果与实际值的对比图。
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression# 创建数据字典
data = {'feature1': [1.1, 2.3, 3.5, 4.7, 5.9, 6.1, 7.3, 8.5, 9.7, 10.9],'feature2': [2.2, 3.4, 4.6, 5.8, 6.0, 7.2, 8.4, 9.6, 10.8, 11.0],'target': [1, 0, 1, 0, 1, 0, 1, 0, 1, 0]
}# 创建 DataFrame
df = pd.DataFrame(data)savedDatasetCsvFilePath = "data/dataset.csv"# 保存为 CSV 文件
df.to_csv(savedDatasetCsvFilePath, index=False)
print(f"DataFrame 已保存至 CSV 文件,路径为 {savedDatasetCsvFilePath}") # 打印保存结果# 从CSV文件加载数据
df = pd.read_csv(savedDatasetCsvFilePath)# 准备数据
X = df[['feature1', 'feature2']]
y = df['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)# 绘制预测结果与实际值的对比图
plt.scatter(y_test, y_pred)
plt.title('Predicted vs Actual')
plt.xlabel('Actual Values')
plt.ylabel('Predicted Values')
plt.plot([y_test.min(), y_test.max()], [y_test.min(), y_test.max()], color='red')# 保存图表
plt.savefig('Images/savedImage.png', bbox_inches='tight')
# 打印结果:对比图已保存至 'Images/savedImage.png'plt.show() # 显示对比图
# 打印结果:对比图已显示在屏幕上
请注意,实际的图表显示效果和文件保存结果取决于您的具体数据和执行环境。上述代码中的注释和输出结果仅为示例。
df.to_csv()
将 DataFrame 保存到 CSV 文件中,并打印出保存的路径。df.read_csv()
从 CSV 文件中加载数据。train_test_split()
将数据集分割为训练集和测试集。LinearRegression()
创建了一个线性回归模型,fit()
方法用于训练模型。predict()
方法用于对测试集进行预测。plt.scatter()
绘制了测试集的实际值和预测值的散点图。plt.plot()
绘制了一条红色直线,表示理想情况下的预测值与实际值完全相同的情况(即完美的预测)。plt.savefig()
将对比图保存到文件中,路径为 'Images/savedImage.png'。请确保 'Images' 文件夹存在于您的工作目录中,否则保存操作可能会失败。plt.show()
显示对比图。
3.2 绘制残差图
残差图可以帮助我们理解模型的误差分布。
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression# 创建数据字典
data = {'feature1': [1.1, 2.3, 3.5, 4.7, 5.9, 6.1, 7.3, 8.5, 9.7, 10.9],'feature2': [2.2, 3.4, 4.6, 5.8, 6.0, 7.2, 8.4, 9.6, 10.8, 11.0],'target': [1, 0, 1, 0, 1, 0, 1, 0, 1, 0]
}# 创建 DataFrame
df = pd.DataFrame(data)savedDatasetCsvFilePath = "data/dataset.csv"# 保存为 CSV 文件
df.to_csv(savedDatasetCsvFilePath, index=False)
print(f"DataFrame 已保存至 CSV 文件,路径为 {savedDatasetCsvFilePath}") # 打印保存结果# 从CSV文件加载数据
df = pd.read_csv(savedDatasetCsvFilePath)# 准备数据
X = df[['feature1', 'feature2']]
y = df['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)# 计算残差
residuals = y_test - y_pred# 绘制残差图
plt.scatter(y_pred, residuals)
plt.title('Residual Plot')
plt.xlabel('Predicted Values')
plt.ylabel('Residuals')
plt.axhline(y=0, color='red', linestyle='--')# 保存图表
plt.savefig('Images/savedImage.png', bbox_inches='tight')
# 打印结果:残差图已保存至 'Images/savedImage.png'plt.show() # 显示残差图
# 打印结果:残差图已显示在屏幕上
请注意,实际的图表显示效果和文件保存结果取决于您的具体数据和执行环境。上述代码中的注释和输出结果仅为示例。
df.to_csv()
将 DataFrame 保存到 CSV 文件中,并打印出保存的路径。df.read_csv()
从 CSV 文件中加载数据。train_test_split()
将数据集分割为训练集和测试集。LinearRegression()
创建了一个线性回归模型,fit()
方法用于训练模型。predict()
方法用于对测试集进行预测。- 计算残差
residuals
,这是实际值与预测值之间的差异。 plt.scatter()
绘制了预测值和残差的散点图。plt.axhline()
在图中添加了一条水平线,表示残差为0的情况(即完美预测)。plt.savefig()
将残差图保存到文件中,路径为 'Images/savedImage.png'。请确保 'Images' 文件夹存在于您的工作目录中,否则保存操作可能会失败。plt.show()
显示残差图。
4、分类结果的可视化
4.1 绘制混淆矩阵
我们训练一个简单的分类模型,并绘制混淆矩阵,以可视化分类结果。
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay
from sklearn.tree import DecisionTreeClassifier# 创建数据字典
data = {'feature1': [1.1, 2.3, 3.5, 4.7, 5.9, 6.1, 7.3, 8.5, 9.7, 10.9],'feature2': [2.2, 3.4, 4.6, 5.8, 6.0, 7.2, 8.4, 9.6, 10.8, 11.0],'target': [1, 0, 1, 0, 1, 0, 1, 0, 1, 0]
}# 创建 DataFrame
df = pd.DataFrame(data)savedDatasetCsvFilePath = "data/dataset.csv"# 保存为 CSV 文件
df.to_csv(savedDatasetCsvFilePath, index=False)
print(f"DataFrame 已保存至 CSV 文件,路径为 {savedDatasetCsvFilePath}") # 打印保存结果# 从CSV文件加载数据
df = pd.read_csv(savedDatasetCsvFilePath)# 准备数据
X = df[['feature1', 'feature2']]
y = df['target']# 分割数据
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 训练模型
model = DecisionTreeClassifier()
model.fit(X_train, y_train)# 进行预测
y_pred = model.predict(X_test)# 计算混淆矩阵
cm = confusion_matrix(y_test, y_pred)# 绘制混淆矩阵
disp = ConfusionMatrixDisplay(confusion_matrix=cm)
disp.plot(cmap='Blues')
plt.title('Confusion Matrix')# 保存图表
plt.savefig('Images/savedImage.png', bbox_inches='tight')
# 打印结果:混淆矩阵图已保存至 'Images/savedImage.png'plt.show() # 显示混淆矩阵图
# 打印结果:混淆矩阵图已显示在屏幕上
请注意,实际的图表显示效果和文件保存结果取决于您的具体数据和执行环境。上述代码中的注释和输出结果仅为示例。
df.to_csv()
将 DataFrame 保存到 CSV 文件中,并打印出保存的路径。df.read_csv()
从 CSV 文件中加载数据。train_test_split()
将数据集分割为训练集和测试集。DecisionTreeClassifier()
创建了一个决策树分类器模型,fit()
方法用于训练模型。predict()
方法用于对测试集进行预测。confusion_matrix()
计算了实际值与预测值之间的混淆矩阵。ConfusionMatrixDisplay()
和plot()
绘制了混淆矩阵的图表。plt.savefig()
将混淆矩阵图保存到文件中,路径为 'Images/savedImage.png'。请确保 'Images' 文件夹存在于您的工作目录中,否则保存操作可能会失败。plt.show()
显示混淆矩阵图。
4.2 绘制ROC曲线
对于二分类问题,我们可以绘制ROC曲线来评估模型的性能。
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import roc_curve, auc# 创建数据字典
data = {'feature1': [1.1, 2.3, 3.5, 4.7, 5.9, 6.1, 7.3, 8.5, 9.7, 10.9],'feature2': [2.2, 3.4, 4.6, 5.8, 6.0, 7.2, 8.4, 9.6, 10.8, 11.0],'target': [1, 0, 1, 0, 1, 0, 1, 0, 1, 0]
}# 创建 DataFrame
df = pd.DataFrame(data)savedDatasetCsvFilePath = "data/dataset.csv"# 保存为 CSV 文件
df.to_csv(savedDatasetCsvFilePath, index=False)
print(f"DataFrame 已保存至 CSV 文件,路径为 {savedDatasetCsvFilePath}") # 打印保存结果# 从CSV文件加载数据
df = pd.read_csv(savedDatasetCsvFilePath)# 准备数据
X = df[['feature1', 'feature2']]
y = df['target']# 分割数据
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 训练模型
model = DecisionTreeClassifier()
model.fit(X_train, y_train)# 计算ROC曲线
y_scores = model.predict_proba(X_test) # 获取预测概率
fpr, tpr, _ = roc_curve(y_test, y_scores[:, 1]) # 计算ROC曲线的FPR和TPR
roc_auc = auc(fpr, tpr) # 计算AUC# 绘制ROC曲线
plt.plot(fpr, tpr, color='blue', label=f'ROC curve (area = {roc_auc:.2f})')
plt.plot([0, 1], [0, 1], color='red', linestyle='--') # 绘制随机猜测线
plt.title('Receiver Operating Characteristic (ROC) Curve')
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.legend(loc='lower right')# 保存图表
plt.savefig('Images/savedImage.png', bbox_inches='tight')
# 打印结果:ROC曲线图已保存至 'Images/savedImage.png'plt.show() # 显示ROC曲线图
# 打印结果:ROC曲线图已显示在屏幕上
请注意,实际的图表显示效果和文件保存结果取决于您的具体数据和执行环境。上述代码中的注释和输出结果仅为示例。
df.to_csv()
将 DataFrame 保存到 CSV 文件中,并打印出保存的路径。df.read_csv()
从 CSV 文件中加载数据。train_test_split()
将数据集分割为训练集和测试集。DecisionTreeClassifier()
创建了一个决策树分类器模型,fit()
方法用于训练模型。predict_proba()
方法用于获取测试集的预测概率。roc_curve()
计算了基于预测概率的 ROC 曲线的 FPR 和 TPR 值。auc()
计算了 ROC 曲线下的面积(AUC)。plt.plot()
用于绘制 ROC 曲线和随机猜测线。plt.savefig()
将 ROC 曲线图保存到文件中,路径为 'Images/savedImage.png'。请确保 'Images' 文件夹存在于您的工作目录中,否则保存操作可能会失败。plt.show()
显示 ROC 曲线图。
通过这些示例,我们可以看到Matplotlib在机器学习中的广泛应用。从数据探索、特征分析到模型结果的可视化,Matplotlib都发挥了重要作用。掌握Matplotlib可以帮助您更好地进行数据分析和机器学习任务。