鱼C论坛

 找回密码
 立即注册
查看: 3667|回复: 17

[已解决]python中画函数图象有关问题

[复制链接]
发表于 2017-12-3 09:42:50 | 显示全部楼层 |阅读模式
20鱼币
最近有个作业要用python写线性分类器,决策面的函数是涉及了矩阵运算的比较复杂的隐函数,我很难表示成y = ...x的这样的形式。
在网上查了挺多的方法,都遇到了一些问题
方法一: 用sympy模块的函数,画隐函数的图像
       
        遇到的问题:1. sympy里面用的是symbols对象,我把f(x) = 0的函数表达完以后,它会报错说symbols对象不能进行np.dot这些我里面用到的矩阵运算
                            2. 这个方法好像不能把我用plot()函数描的样本点画在一张图里

方法二: 解方程,解出y值,然后用普通的plot里面的方法描出来
       
        遇到的问题:1.我不太熟悉解方程的函数,只了解到一个fsolve可以解非线性的方程,但是这个必须给一个解,然后它找到附近的好像是这样。


希望各位大佬指导一下!!!!
1. 我希望能画出一张图,里面有我描好的样本点,以及画出我的分界面函数的那条线。
2.希望大家能针对我上面的问题,如果有更好地解决方案请告诉我!
3. 如果用python画函数图象是自讨苦吃的话。。也请大佬及时指正我走过别的路,用excel什么的。我不会matlab,而且excel好像也是要解方程,不能直接画隐函数,会出现多解只取其一的情况导致分界面离样本点很远
最佳答案
2017-12-3 09:42:51
https://liam0205.me/2014/09/11/matplotlib-tutorial-zh-cn/
Matplotlib 教程
Matplotlib 可能是 Python 2D-绘图领域使用最广泛的套件。它能让使用者很轻松地将数据图形化,并且提供多样化的输出格式。这里将会探索 matplotlib 的常见用法。

最佳答案

查看完整内容

Matplotlib 教程 Matplotlib 可能是 Python 2D-绘图领域使用最广泛的套件。它能让使用者很轻松地将数据图形化,并且提供多样化的输出格式。这里将会探索 matplotlib 的常见用法。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-12-3 09:42:51 | 显示全部楼层    本楼为最佳答案   
https://liam0205.me/2014/09/11/matplotlib-tutorial-zh-cn/
Matplotlib 教程
Matplotlib 可能是 Python 2D-绘图领域使用最广泛的套件。它能让使用者很轻松地将数据图形化,并且提供多样化的输出格式。这里将会探索 matplotlib 的常见用法。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-12-3 11:25:53 | 显示全部楼层
http://matplotlib.org/gallery/index.html

这里是所有你想得到或想不到的绘图例子
那种是你想要的,点进去看例程
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-12-3 11:59:18 | 显示全部楼层
SixPy 发表于 2017-12-3 10:15
Matplotlib 教程
Matplotlib 可能是 Python 2D-绘图领域使用最广泛的套件。它能让使用者很轻松地将数据 ...

这个我看过了,这个主要是讲有哪些基础函数可以用。
可是我主要的问题是,我的函数是矩阵运算的,不能直接表示成y=...x的形式,
然后用描点(x,y)的方法画出来。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-12-3 11:59:49 | 显示全部楼层
SixPy 发表于 2017-12-3 11:25
这里是所有你想得到或想不到的绘图例子
那种是你想要的,点进去看例程

哇。。
这个对我难度好大。
我看了好几个图,内部都是把纵坐标表示出来。
没看见隐函数的。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-12-3 16:44:33 | 显示全部楼层
你问题描述的有点笼统啊,至少从你目前的问题上,我感觉到这已经是个机器学习领域的问题,而不是python代码上的问题了。

线性分类器很多啊,你用的是什么,还要画分界线,SVM么?

你的x,y很难表示是什么意思?只能用 f(x, y)=0 这样么,还是x, y是高维空间变量没办法画出来?

sympy是用于符号计算的库,而matplotlib是基于numpy数值计算的,不能混用的。

fsolve应该是scipy.optimize子包里面的,需要初始值进行迭代求解,因为这种类似牛顿法的求解函数都是需要初值和梯度的,你可以在x的定义域里随意找一个初始值,比如0,但是要求维数一致。不过初值的选取会影响收敛速度,而且有可能陷入局部解,这与原方程有关。

以上,希望你可以把问题讲的更具体一点
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-12-3 20:48:32 | 显示全部楼层
DarkmasterSugar 发表于 2017-12-3 16:44
你问题描述的有点笼统啊,至少从你目前的问题上,我感觉到这已经是个机器学习领域的问题,而不是python代码 ...

是这样的。
就是二维正态分布特征的贝叶斯分类器而已,决策面的函数里对x(即输入的二维特征)进行了很多矩阵的左乘右乘,而决策面的函数就是一个关于这二维特征的函数,即关于【x,y】的函数,其中x可以是我arange出来的很多点,然后y是未知的,通过决策面函数f(x,y) = 0解出来。

我的目的是画出这个决策面的函数图象,以便直观地看到它划分开了我的两类样本点。
我第一次接触matplotlib,发现里面大部分地描点,都是要用x把y表示出来,再进行plot(x,y)这样的描点。
但是如上所述,我的x,y在一个向量里,作为特征整体输入了。所以要反解出来,就要把矩阵乘法写开,写成普通乘法的那种表达式,我感觉过于复杂了。
所以我就想寻求一种f(x,y),我输入x,直接就把函数画出来的方法。
嗯。。以上,不知道还有什么没说清楚的,如有的话请回复~

谢谢!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-12-3 21:01:13 | 显示全部楼层
初学者,不太会
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-12-4 08:59:31 | 显示全部楼层
逄逄 发表于 2017-12-3 20:48
是这样的。
就是二维正态分布特征的贝叶斯分类器而已,决策面的函数里对x(即输入的二维特征)进行了很 ...
所以我就想寻求一种f(x,y),我输入x,直接就把函数画出来的方法。


所谓画图,你要知道计算机图形学的一些基本概念。
在计算机中,图片最终都是二维点阵图
点阵图可以看作一个二维矩阵
所以,要画图,必然要给出点的x,y坐标。
无论什么函数,你把它的计算结果转化为点坐标就能画出来
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-12-4 22:26:02 | 显示全部楼层
SixPy 发表于 2017-12-4 08:59
所谓画图,你要知道计算机图形学的一些基本概念。
在计算机中,图片最终都是二维点阵图
点阵图可以 ...

emmmm
这些我知道,不过谢谢了!

后来我解决的办法是我用草稿纸强行把矩阵的乘法写成了普通的乘法,超长的式子啊!!!!
然后我暴力求解,好在是个二次的可以套求根公式!!!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-12-4 22:52:41 | 显示全部楼层
逄逄 发表于 2017-12-4 22:26
emmmm
这些我知道,不过谢谢了!

矩阵乘法有numpy阿
直接 a*b 就可以了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-12-4 23:06:18 | 显示全部楼层
SixPy 发表于 2017-12-4 22:52
矩阵乘法有numpy阿
直接 a*b 就可以了

我说一下我的情况。 我需要描出许多个点(x,y),让它构成一个分界面
这个(x,y)的物理意义是作为一个特征向量参与运算
[x,y].T * (Wi - Wj) [x,y] + (wi - wj).T * [x, y] + wi0 -wj0 = 0这就是我要画出的函数

其中Wi ,Wj = 样本的协方差矩阵 和样本的均值矩阵做一些乘法运算
wi , wj = 样本的协方差矩阵和样本均值矩阵做另一些运算
wi0  wj0 =In( 样本的协方差矩阵的行列式 ) + In(p)   p是先验概率

你可以看到我要求的(x,y)在一个矩阵里,你上面说的给一个x, 表示成y, 描出这个点,的这个方法
在这里面是非常复杂的反解过程。

你说的numpy也只是把这个式子表示出来,但是对描点没有实质性的帮助。
不知道您懂了吗
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-12-5 11:18:17 | 显示全部楼层
首先,根据你的问题,十分建议你去用matlab做(如果你研究过matlab就会发现其中有求各种方程解的内建函数)。
其次,根据你的表述,其实你的主要问题应该是求反解而不是画图,依我愚见,推荐你先去查找求反解的算法,之后的画图问题迎刃而解。
不知道能不能帮到你
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-12-5 12:20:47 From FishC Mobile | 显示全部楼层
利用计算机求解的好处就是只要有求根公式直接往上套就好了啊,运算再复杂也不用你亲自动手的啊!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-12-5 12:23:28 From FishC Mobile | 显示全部楼层
本帖最后由 jerryxjr1220 于 2017-12-5 12:27 编辑

而且根据你描述的应该是线性方程吧,用matplotlib是可以直接求解的,线性规划库pymprog也能直接求解。
pymprog直接写成f(x,y)=0的形式,就能解了
具体用法可以看我的教程http://bbs.fishc.com/forum.php?mod=viewthread&tid=96997&extra=page%3D1&mobile=2
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-12-5 22:21:48 | 显示全部楼层
Dreamer菌 发表于 2017-12-5 11:18
首先,根据你的问题,十分建议你去用matlab做(如果你研究过matlab就会发现其中有求各种方程解的内建函数) ...

谢谢您!

主要是自己不会MATLAB,然后我最近准备学习一下这个了。反正年轻,多学学吧
至于这个问题,因为急着交实验报告,所以我直接暴力手解了这个方程,然后把y反解了。

感激~
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-12-5 22:22:52 | 显示全部楼层
jerryxjr1220 发表于 2017-12-5 12:20
利用计算机求解的好处就是只要有求根公式直接往上套就好了啊,运算再复杂也不用你亲自动手的啊!

求根公式的前提是要能表示出a,b,c吧= = 。。。。
我的描述里面也没说这个函数一眼就能看到a,b,c
我是用很暴力的办法,手算化简出了a,b,c。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-12-5 22:24:50 | 显示全部楼层
jerryxjr1220 发表于 2017-12-5 12:23
而且根据你描述的应该是线性方程吧,用matplotlib是可以直接求解的,线性规划库pymprog也能直接求解。
pym ...

非线性方程噢,是一个超二次曲面,最后我是用等高线的方法找到分界面的。
我之前没有看到pymprog这个库,之前都是看到scipy, sympy这两个,而这两个刚好要应用到这个问题里都有一些困难。
这个库我之后会去学习一下。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-3-4 11:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表