scikit-learn 中KNN分类绘图

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/mr_muli/article/details/84496351
# -*- coding: utf-8 -*-
"""
Created on Sun Nov 25 15:55:09 2018

@author: muli
"""

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets.samples_generator import make_classification
from sklearn import neighbors

# 绘制背景的边界
from matplotlib.colors import ListedColormap

# 生成随机数据
# X为样本特征,Y为样本类别输出, 共1000个样本,每个样本2个特征,
# 输出有3个类别,没有冗余特征,每个类别一个簇
X, Y = make_classification(n_samples=1000, n_features=2, n_redundant=0,
                             n_clusters_per_class=1, n_classes=3,random_state=1)
# X 为样本的特征,此案例中,只定义为两类
# marker='o':圆形
# c=Y:颜色,顺序或颜色顺序, `c`可以是一个二维数组,其中的行是RGB或RGBA,但是,包括单个的情况行为所有点指定相同的颜色
# 可认为 c 颜色由聚类的簇 n_classes=n 自动决定
plt.scatter(X[:, 0], X[:, 1], marker='o', c=Y)
plt.show()


# KNeighborsClassifier 分类器
clf = neighbors.KNeighborsClassifier(n_neighbors = 15 , weights='distance')
clf.fit(X, Y)


print("------------------------------")

# 颜色浓
cmap_light = ListedColormap(['#FFAAAA', '#AAFFAA', '#AAAAFF'])
# 颜色淡
cmap_bold = ListedColormap(['#FF0000', '#00FF00', '#0000FF'])

# 确认训练集的边界
# 由 X特征的最值确定 确定
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1

# 生成随机数据来做测试集,然后作预测
# x_min--x_max,步长为 0.02----等差数列
# xx,yy分别是X的两个特征的其中一个
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02),
                         np.arange(y_min, y_max, 0.02))

# np.r_是按列连接两个矩阵,就是把两矩阵上下相加,要求列数相等。
# np.c_是按行连接两个矩阵,就是把两矩阵左右相加,要求行数相等。
# Z为测试集的数据
Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])

# 画出测试集数据
Z = Z.reshape(xx.shape)
plt.figure()

# plt.pcolormesh(xx, yy, y_predict, cmap=cmap_light)
# 作用:画出不同类型数据的色彩范围--区域
# xx,yy:图像区域内的采样点--组织成一个点
# y_predict:根据采样点计算出的每个点所属的类别
# camp:将相应的值映射到颜色
plt.pcolormesh(xx, yy, Z, cmap=cmap_light)

# 也画出所有的训练集数据
plt.scatter(X[:, 0], X[:, 1], c=Y, cmap=cmap_bold)
plt.xlim(xx.min(), xx.max())
plt.ylim(yy.min(), yy.max())
plt.title("3-Class classification (k = 15, weights = 'distance')" )

  • 如图所示:

木里

猜你喜欢

转载自blog.csdn.net/mr_muli/article/details/84496351