图形化你的数据
scikit learn 是个强大的机器学习工具,我们可以用它现成的包,直接运行机器学习的各种模型,分类和回归。
本文介绍如何用scikit learn 去处理数据集,达到你要的数据分布效果。 对于阐述数据分类问题很有帮助。
下行是引入内置的数据集
from sklearn.datasets import make_moons
引入不平衡算法。
from imblearn.datasets import make_imbalance
决定画几个图,本文画了一个图,所以是一行一列。
f, ax2 = plt.subplots(1, 1)
multiplier 0.1 小类的数据比例,越小,小类数据实例越少。
X_, y_ = make_imbalance(X, y, ratio=ratio_func,**{"multiplier": 0.1,"minority_class": 1})
此-3是决定了图像大小,越是负数图像越大。
plt.tight_layout(-3)
整个代码如下
import matplotlib.pyplot as plt
from collections import Counter
from sklearn.datasets import make_moons
from imblearn.datasets import make_imbalance
print(__doc__)
def plot_decoration(ax):
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
ax.get_xaxis().tick_bottom()
ax.get_yaxis().tick_left()
ax.spines['left'].set_position(('outward', 10))
ax.spines['bottom'].set_position(('outward', 10))
ax.set_xlim([-3, 3])
# Generate the dataset
X, y = make_moons(n_samples=380, shuffle=True, noise=0.8, random_state=10)
f, ax2 = plt.subplots(1, 1)
def ratio_func(y, multiplier, minority_class):
target_stats = Counter(y)
return {minority_class: int(multiplier * target_stats[minority_class])}
ax=ax2
X_, y_ = make_imbalance(X, y, ratio=ratio_func,**{"multiplier": 0.1,"minority_class": 1})
ax.scatter(X_[y_ == 0, 0], X_[y_ == 0, 1], label="Class #0", alpha=0.5)
ax.scatter(X_[y_ == 1, 0], X_[y_ == 1, 1], label="Class #1", alpha=0.5)
ax.set_title('ratio = {}'.format(0.1))
plot_decoration(ax)
plt.tight_layout(-3)
plt.show()
注意python连数据行的对齐都很有要求,如果有的数据行没有对齐,变量声明不会被识别。
这是最后画出来的图。