matplot 画等高线图

matplot 除了可以画比较简单的图之外,还可以类似于等高线这样的图。在机器学习里面可以用于可视化分类的效果,比如在可视化svm分类的时候,就可以这样的方式去画图,在可视化上往往会有很好的效果。

代码如下:

import matplotlib.pyplot as plt 
import numpy as np

def f(x,y):
    # the height functions
    return 2 * x +y

n = 256
# 将(-3,+3) 的这个区间分成256
x = np.linspace(-3, 3, n)  # x shape (256,)
y = np.linspace(-3, 3, n)  # y shape (256,)

# np.meshgrid 形成一个平面网格,
# X代表这个平面点的横坐标,Y代表这个平面点的纵坐标
# X or Y shape is : (256, 256) 
# 这个函数的具体功能在下面讲
X,Y = np.meshgrid(x, y)  

# 接下来进行颜色填充
# 使用函数plt.contourf把颜色加进去,位置参数分别为:X, Y, f(X,Y)。
plt.contourf(X, Y, f(X, Y))
# 更多的参数,可以画出不同的风格,alpha=.75 表示透明度 , cmap=plt.cm.hot 表示f(X,Y) 的值对应到color map的暖色组中寻找对应颜色
#plt.contourf(X, Y, f(X, Y), 8, alpha=.75, cmap=plt.cm.hot)
plt.show()

结果如下图:


image.png

如果要画的点是离散的取值怎么办?
for example,画一个二维平面,上面的点的取值是离散的(比如说,0或1)。在机器学习经常需要可视化这样的东西,给一个平面,上面有很多点,有的属于正类,有的属于负类,那么如果可视化?

"""
画一个二维平面,上面的点的取值是离散的(比如说,0或1),
比如说机器学习经常需要可视化这样的东西,给一个平面,上面有很多点,有的属于正类,有的属于负类,那么如果可视化?

下面,是一个解决方案
"""

import matplotlib.pyplot as plt 
import numpy as np


n = 10
x = np.linspace(-3, 3, n)  
y = np.linspace(-3, 3, n)  


X,Y = np.meshgrid(x, y)

# X,Y指的是一个 x 属于[-3,3],y属于[-3,3]的二维平面
# z表示的是在这个二维平面内点的取值
# np.random.randint(0,2,X.shape) 指的是生成一个shape形状的矩阵,里面的取值是0或1
z=np.random.randint(0,2,X.shape)

"""
rand = np.random.randint(0,2,(3,8))
print(rand)
 
[[1 1 0 0 1 0 1 0]
 [0 1 0 1 0 1 0 0]
 [0 0 1 0 0 1 0 0]]
"""

plt.contourf(X, Y, z)
plt.show()

结果如下:

image.png

使用matplot画图的时候,常用的几个numpy函数:

np.meshgrid() 函数
一个简单的示例代码如下:

x = np.arange(-2,2)
y = np.arange( 0,3)   #生成一位数组,其实也就是向量

x
Out[31]: array([-2, -1,  0,  1])

y
Out[32]: array([0, 1, 2])

#将两个一维数组变为二维矩阵
ret_x ,ret_y = np.meshgrid(x,y)  

# ret_x  可以理解为 x 纵向扩展
ret_x  Out[36]: 
array([[-2, -1,  0,  1],
       [-2, -1,  0,  1],
       [-2, -1,  0,  1]])

# ret_y 可以理解为 y 横向扩展
ret_y Out[37]: 
array([[0, 0, 0, 0],
       [1, 1, 1, 1],
       [2, 2, 2, 2]])

如果我们想把 一个平面上面,x 属于[-2,1],y属于[0,2]的区域 里面的点画出来。np.meshgrid()就可以提供这样的功能。

它的返回值ret_x , ret_y 维度是相同的,分别表示了这个区域内点的横坐标和纵坐标。

np.c_ or np.r_ 函数
np.c_ or np.r_ 函数的作用是按行或者是按列合并向量

import numpy as np 

a = np.array([1,2,3])
b = np.array([5,2,1])

# np.r_按row来组合array
# a,b 必须是向量
print (np.r_[a,b])
# 输出
# [1 2 3 5 2 1]

# np.c_按colunm来组合array
print (np.c_[a,b])
"""
# 输出
[[1 5]
 [2 2]
 [3 1]]
"""

举个例子:
svm 非线性核分类

"""
一个 非线性svm分类器 的demo
"""

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import style
from sklearn import svm
#style.use("ggplot")


# 构造了一个非线性的数据
X = np.array([[1,1],[5,5],[5,1],[1,5],[2.5,2.5],[2,3],[3,2],[2,2],[3,3]])
y = [1,1,1,1,0,0,0,0,0]
plt.scatter(X[:, 0], X[:, 1], c = y)
#plt.show()

#svc = svm.SVC(kernel='linear',C=1.0) # 线性核
#svc = svm.SVC(kernel='rbf',C=1.0,gamma=1)  #如果是非线性核 可以还不同的gamma值
svc = svm.SVC(kernel='rbf',C=1.0,gamma='auto')
svc.fit(X,y)

h = 0.01
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, h),np.arange(y_min, y_max, h))


plt.subplot(1, 1, 1)
Z = svc.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.contourf(xx, yy, Z, cmap=plt.cm.Paired, alpha=0.8)

plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Paired)
plt.xlim(xx.min(), xx.max())
plt.title("SVC with kernel "+svc.kernel)
plt.show()

image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,372评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,368评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,415评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,157评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,171评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,125评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,028评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,887评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,310评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,533评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,690评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,411评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,004评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,812评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,693评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,577评论 2 353