1. 引言
数据可视化是数据科学和机器学习领域中一个重要的组成部分,它能够帮助我们更好地理解数据,发现数据中的模式和趋势。Scikit-learn是一个强大的Python机器学习库,它不仅提供了丰富的算法,还包含了数据可视化的工具。本文将带你通过10个实战示例,深入了解Scikit-learn的数据可视化功能。
2. Scikit-learn数据可视化基础
在开始实战之前,我们需要了解Scikit-learn中一些常用的数据可视化工具,包括:
- matplotlib: 用于绘制各种图表,如散点图、折线图、条形图等。
- seaborn: 建立在matplotlib之上,提供了更高级的绘图功能。
- plotly: 一个交互式可视化库,可以创建交互式的图表。
3. 实战示例
示例1:基本散点图
import matplotlib.pyplot as plt
import numpy as np
# 创建一些数据
x = np.random.rand(50)
y = np.random.rand(50)
# 绘制散点图
plt.scatter(x, y)
plt.show()
示例2:散点图上的线性回归线
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
import numpy as np
# 创建一些数据
x = np.linspace(0, 10, 100)
y = 3 * x + np.random.normal(0, 1, 100)
# 创建线性回归模型
model = LinearRegression()
model.fit(x.reshape(-1, 1), y)
# 绘制散点图和回归线
plt.scatter(x, y, color='blue')
plt.plot(x, model.predict(x.reshape(-1, 1)), color='red')
plt.show()
示例3:箱线图
import matplotlib.pyplot as plt
import numpy as np
# 创建一些数据
data = np.random.normal(0, 1, 1000)
# 绘制箱线图
plt.boxplot(data)
plt.show()
示例4:热力图
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
# 创建一些数据
data = np.random.rand(10, 10)
# 绘制热力图
sns.heatmap(data)
plt.show()
示例5:层次聚类树状图
from sklearn.cluster import AgglomerativeClustering
import matplotlib.pyplot as plt
import numpy as np
# 创建一些数据
x = np.random.rand(50)
y = np.random.rand(50)
# 创建层次聚类模型
model = AgglomerativeClustering(n_clusters=3)
model.fit(np.column_stack((x, y)))
# 绘制树状图
plt.figure(figsize=(10, 7))
dendrogram = sch.dendrogram(model.dendrogram(), orientation='top', labels=np.arange(50))
plt.show()
示例6:ROC曲线
from sklearn.metrics import roc_curve, auc
import matplotlib.pyplot as plt
import numpy as np
# 创建一些数据
x = np.random.rand(100)
y = np.random.rand(100)
y_true = np.random.choice([0, 1], 100, p=[0.7, 0.3])
# 创建逻辑回归模型
model = LogisticRegression()
model.fit(x.reshape(-1, 1), y_true)
# 计算ROC曲线
fpr, tpr, thresholds = roc_curve(y_true, model.predict_proba(x.reshape(-1, 1))[:, 1])
roc_auc = auc(fpr, tpr)
# 绘制ROC曲线
plt.figure()
plt.plot(fpr, tpr, color='darkorange', lw=2, label='ROC curve (area = %0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver Operating Characteristic')
plt.legend(loc="lower right")
plt.show()
示例7:混淆矩阵
from sklearn.metrics import confusion_matrix
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
# 创建一些数据
x = np.random.rand(100)
y_true = np.random.choice([0, 1], 100, p=[0.7, 0.3])
y_pred = np.random.choice([0, 1], 100, p=[0.6, 0.4])
# 计算混淆矩阵
cm = confusion_matrix(y_true, y_pred)
# 绘制混淆矩阵
plt.figure(figsize=(8, 6))
sns.heatmap(cm, annot=True, fmt='d', cmap='Blues')
plt.xlabel('Predicted')
plt.ylabel('True')
plt.show()
示例8:LDA降维
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
import matplotlib.pyplot as plt
import numpy as np
# 创建一些数据
x = np.random.rand(100, 2)
y = np.random.choice([0, 1], 100, p=[0.7, 0.3])
# 标准化数据
x = StandardScaler().fit_transform(x)
# 创建LDA模型
model = PCA(n_components=1)
x_lda = model.fit_transform(x)
# 绘制降维后的数据
plt.scatter(x_lda[:, 0], np.zeros_like(x_lda[:, 0]), c=y)
plt.xlabel('LDA Feature')
plt.ylabel('Class')
plt.show()
示例9:t-SNE降维
from sklearn.manifold import TSNE
import matplotlib.pyplot as plt
import numpy as np
# 创建一些数据
x = np.random.rand(100, 2)
y = np.random.choice([0, 1], 100, p=[0.7, 0.3])
# 创建t-SNE模型
model = TSNE(n_components=2)
x_tsne = model.fit_transform(x)
# 绘制降维后的数据
plt.scatter(x_tsne[:, 0], x_tsne[:, 1], c=y)
plt.xlabel('t-SNE Feature 1')
plt.ylabel('t-SNE Feature 2')
plt.show()
示例10:3D散点图
import matplotlib.pyplot as plt
import numpy as np
# 创建一些数据
x = np.random.rand(50)
y = np.random.rand(50)
z = np.random.rand(50)
# 绘制3D散点图
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(x, y, z)
ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')
plt.show()
4. 总结
通过以上10个实战示例,我们可以看到Scikit-learn的数据可视化功能非常强大,可以帮助我们更好地理解数据,发现数据中的模式和趋势。在实际应用中,我们可以根据需要选择合适的工具和图表来展示我们的数据。
