ibmm,让思维导图回归本质

赖勇浩(http://laiyonghao.com)

缘起

你想用思维导图来分析问题,然后,你就有两个问题了。——无名氏
许多朋友都听说过思维导图(又称脑图),它是用来理清思路的好办法。同时我也相信许多朋友在使用思维导图的过程中遇到了许多问题,比如:
  • 搜索了一下,发现思维导图的编辑器都好几十 MB;
  • 下载安装发现这些 java 写的程序启动巨慢,还占内存;
  • 编辑了三五十个节点发现自己不停地要调整位置,还调不好看;
  • 调好看了发现自己都忘了要分析的问题;
  • 保存的文件非得用专门编辑器才能看和改,说是 xml 文本格式打开发现根本看不懂改不得;
  • 把文件放到版本控制系统里,版本比对的时候一团乱像,理不清来龙去脉;
  • 号称跨平台,手机一般看不了,更别提编辑了。
是的,我也遇到了这些问题,然后我就开始去找一些更轻量级的编辑器,希望能够方便地使用思维导图,因为我觉得这东西不应该这么复杂,之前找到的编辑器都没有抓住思维导图的本质。
我找到的最有启发的东西是一个网站:Text 2 Mind Map( http://www.text2mindmap.com/),它提出了使用基于缩进的文本来描述思维导图,然后再由软件渲染出来!是的,就是像 Python 那样的缩进语法,多一层缩进就是上一层的子节点。是的,我们再也不需要去调整各个节点的位置了,软件会自动帮我们计算最好看的渲染方案!下面来一个例子,文本是这样的:
  1. Months of the year  
  2.     Spring  
  3.         March  
  4.         April  
  5.         May  
  6.     Summer  
  7.         June  
  8.         July  
  9.         August  
  10.     Autumn  
  11.         September  
  12.         October  
  13.         November  
  14.     Winter  
  15.         December  
  16.         January  
  17.         February  

渲染出来的图片是这样的:


漂亮吧?是的!太漂亮了。但是我在使用的过程中发现如果有一两百个节点,这个 Flash 开发的应用程序极易崩溃!除此之前我也没有办法让它跟其它软件或网络应用结合起来。所以我开始以此为出发点,去想一些自己的方案。最后结合我自己曾用过一下 graphviz 和 python 的特点,我决定自己写一个脚本来做基于缩进的思维导图的文本与 graphviz 的 dot 语言之间的转换。这就是 ibmm2gv,考虑到日后可能会有 ibmm2any 的可能,我就把它放进了一个叫 ibmm(indentation-based mind map)的项目里,并托管到 google code( http://code.google.com/p/ibmm/)。

安装

安装 ibmm2gv 非常简单,因为它已经托管到了 pypi,只要你安装了 python 和 pip,然后在命令行执行:
  1. pip install -U ibmm2gv  
就安装成功了。ibmm2gv 是遵循 unix 哲学的小应用,默认情况下它从标准输入里读取输入,然后把输出放到标准输出,你可以使用管道把它跟 graphviz 的生成程序 neato(也可以是别的渲染引擎,比如 dot)连接起来。下面举个例子,把上文中的文本保存到一个文件中,取名为 season.ibmm,然后在其目录执行:
  1. cat season.ibmm | ibmm2gv | neato -Tpng -oseason.png  

你可以看到生成的 season.png 图片了。见下图:


怎么样?跟 Text 2 Mind Map 生成的图片也差不太多吧?好嘛好嘛,我知道这是黑白的风格好像有点逊色,但你要理解啊,这是我用两天业余时间做的 0.0.1 版本,接下来我研究一下 graphviz,生成漂亮的真彩图片不是问题。
重点是有了 ibmm2gv,以后只要打开记事本就可以写脑图了,手机平板都不成问题啊!保存到 svn/hg/git 都可以,版本一比对,一目了然!哪怕有时候 SSH 连接到服务器上,虽然看不到图,但看到树状的纯文本基本上也可以脑补完全了!

关于中文

graphviz 是支持中文的,需要指定 -Nfontname 参数,不然默认情况下找不到中文字体来渲染就乱码了,在 windows 上可以试一下 -Nfontname="Microsoft YaHei",这表示使用微软雅黑,在 linux 下可以使用 -Nfontname="WenQuanYi Micro Hei Mono",这表示使用文泉驿微米黑。在 linux 下可以用 fc-list 来看一下安装了哪些字体,如果没有文泉驿微米黑可以使用命令 aptitude install ttf-wqy-microhei 安装。下面是一个例子:
  1. 一年 12 个月  
  2.     春  
  3.         三月  
  4.         四月  
  5.         五月  
  6.     夏  
  7.         六月  
  8.         七月  
  9.         八月  
  10.     秋  
  11.         九月  
  12.         十月  
  13.         十一月  
  14.     冬  
  15.         十二月  
  16.         一月  
  17.         二月  

把上述文本保存为 season-zh.ibmm,执行命令:

  1. ibmm2gv --infile=season-zh.ibmm | neato -Tpng -oseason-zh.png -Nfontname="WenQuanYi Micro Hei Mono"  

就可以看到使用文泉驿微米黑字体在 linux 下渲染出来的图片了:


准实时看到最后效果

很多急性子,希望随时能够看到最后的效果,这里有一个还算过得去的方案,需要你使用 windows 7 系统。

  1. 打开一个命令行界面,在你保存 ibmm 文件的路径下执行:python -m SimpleHTTPServer ,这样你就开了一个本地的 HTTP 服务器。
  2. 然后把你的文本编辑器打开,按下 windows 键和左方向键把它放在左半屏,编辑、保存,
  3. 然后在一个新的命令行窗口中执行生成脑图的命令;
  4. 然后再打开一个浏览器,按下 windows 键和右方向键把它放在右半屏,在地址栏输入 http://127.0.0.1:8000,就可以看到生成的脑图的文件名,点开即可查看。在后续的编辑过程中,只需要保存、生成、在浏览器按 F5 刷新即可。

后续开发

  1. 首要的肯定是更漂亮的效果。
  2. 其次是类似 restview 的方便的预览方案。
  3. 然后是各种 wiki 的相应的插件的开发,敬请期待吧!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
7个回归分析方法 什么是回归分析? 回归分析是一种预测性的建模技术,它研究的是因变量(目标)和自变量(预测器)之间的关系。 这种技术通常用于 预测分析、 时间序列模型 以及发现变量之间的因果关系。 例如,司机的鲁莽驾驶与道路交通事故数量之间的关系,最好的研究方法就是回归回归分析是建模和分析数据的重要工具。 在这里,我们使用曲线/线来拟合这些数据点, 在这种方式下,从曲线或线到数据点的距离差异最小。 我会在接下来的部分详细解释这一点。 我们为什么使用回归分析? 如上所述,回归分析估计了两个或多个变量之间的关系。 下面,让我们举一个简单的例子来理解它: 比如说,在当前的经济条件下,你要估计一家公司的销售额增长情况。 现在,你有公司最新的数据,这些数据显示出销售额增长大约是经济增长的2.5倍。 那么使用回归分析,我们就可以根据当前和过去的信息来预测未来公司的销售情况。 使用回归分析的好处良多。 具体如下: • 它表明自变量和因变量之间的显著关系 它表明多个自变量对一个因变量的影响强度 回归分析也允许我们去比较那些衡量不同尺度的变量之间的相互影响,如价格变动与促销活动数量之间联系。 这些有利于帮助市场研究人员,数据分析人员以及数据科学家排除并估计出一组最佳的变量,用来构建预测模型。 我们有多少种回归技术? 有各种各样的回归技术用于预测。 这些技术主要有三个度量 (自变量的个数, 因变量的类型 回归线的形状)。 对于那些有创意的人,如果你觉得有必要使用上面这些参数的一个组合,你甚至可以创造出一个没有被使用过的回归模型。 但在你开始之前,先了解如下最常用的回归方法: 1. 线性回归(Linear Regression) 线性回归通常是人们在学习预测模型时首选的技术之一。 在这种技术中, 因变量是连续的, 自变量可以是连续的也可以是离散的, 回归线的性质是线性的。 线性回归使用最佳的拟合直线(也就是回归线) 在因变量(Y)和一个或多个自变量(X)之间建立一种关系。 用一个方程式来表示它,即 Y=a+b*X + e, 其中a表示截距, b表示直线的斜率, e是误差项。 这个方程可以根据给定的预测变量(s)来预测目标变量的值。 现在的问题是:我们如何得到一个最佳的拟合线呢? 这个问题可以使用最小二乘法轻松地完成。 一元线性回归和多元线性回归的区别在于, 多元线性回归有(>1)个自变量, 而一元线性回归通常只有1个自变量。 最小二乘法也是用于拟合回归线最常用的方法。 对于观测数据,它通过最小化每个数据点到线的垂直偏差平方和来计算最佳拟合线。 因为在相加时,偏差先平方,所以正值和负值没有抵消。 我们可以使用R-square指标来评估模型性能。 要点: • 自变量与因变量之间必须有线性关系 • 多元回归存在多重共线性,自相关性和异方差性 线性回归对异常值非常敏感。它会严重影响回归线,最终影响预测值 多重共线性会增加系数估计值的方差,使得在模型轻微变化下,估计非常敏感。 结果就是系数估计值不稳定, 在多个自变量的情况下,我们可以使用向前选择法,向后剔除法和逐步筛选法来选择最重要的自变量。 2. 逻辑回归(Logistic Regression) 逻辑回归是用来计算“事件=Success”和“事件=Failure”的概率。 当因变量的类型属于二元(1 / 0,真/假,是/否)变量时,我们就应该使用逻辑回归。 这里,Y的值从0到1,它可以用下方程表示。 odds= p/ (1-p) = probability of event occurrence / probability of not event occurrence ln(odds) = ln(p/(1-p)) logit(p) = ln(p/(1-p)) = b0+b1X1+b2X2+b3X3....+bkXk 概要 上述式子中,p表述具有某个特征的概率。 你应该会问这样一个问题:我们为什么要在公式中使用对数log呢? 因为在这里我们使用的是的二项分布(因变量),我们需要选择一个对于这个分布最佳的连结函数。 它就是Logit函数。 在上述方程中,通过观测样本的极大似然估计值来选择参数, 而不是最小化平方和误差(如在普通回归使用的)。 要点: • 它广泛的用于分类问题。 逻辑回归不要求自变量和因变量是线性关系。 它可以处理各种类型的关系,因为它对预测的相对风险指数OR使用了一个非线性的log转换。 逻辑回归是用于分类的~这个得记住 为了避免过拟合和欠拟合,我们应该包括所有重要的变量。 有一个很好的方法来确保这种情况, 就是使用逐步筛选方法来估计逻辑回归。 它需要大的样本量,因为在样本数量较少的情况下,极大似然估计的效果比普通的最小二乘法差。 自变量不应该相互关联的,即不具有多重共线性。 然而,在分析和建模中,我们可以选择包含分类变量相互作用的影响。 • 如果因变量的值是定序变量,则称它为序逻辑回归 • 如果因变量是多类的话,则称它为多元逻辑回归 3. 多项式回归(Polynomial Regression) 对于一个回归方程,如果自变量的指数大于1,那么它就是多项式回归方程。 如下方程所示:y=a+b*x^2 在这种回归技术中,最佳拟合线不是直线。 而是一个用于拟合数据点的曲线。 重点: 虽然会有一个诱导可以拟合一个高次多项式并得到较低的错误,但这可能会导致过拟合。 你需要经常画出关系图来查看拟合情况,并且专注于保证拟合合理,既没有过拟合又没有欠拟合。 下面是一个图例,可以帮助理解: 明显地向两端寻找曲线点,看看这些形状和趋势是否有意义。 更高次的多项式最后可能产生怪异的推断结果。 4. 逐步回归(Stepwise Regression) 在处理多个自变量时,我们可以使用这种形式的回归。 在这种技术中,自变量的选择是在一个自动的过程中完成的,其中包括非人为操作。 这一壮举是通过观察统计的值,如R-square,t-stats和AIC指标,来识别重要的变量。 逐步回归通过同时添加/删除基于指定标准的协变量来拟合模型。 下面列出了一些最常用的逐步回归方法: • 标准逐步回归法做两件事情。即增加和删除每个步骤所需的预测。 • 向前选择法从模型中最显著的预测开始,然后为每一步添加变量。 • 向后剔除法与模型的所有预测同时开始,然后在每一步消除最小显着性的变量。 这种建模技术的目的是使用最少的预测变量数来最大化预测能力。 这也是处理高维数据集的方法之一。 5. 岭回归(Ridge Regression) 岭回归分析是一种用于存在多重共线性(自变量高度相关)数据的技术。 在多重共线性情况下,尽管最小二乘法(OLS)对每个变量很公平,但它们的差异很大,使得观测值偏移并远离真实值。 岭回归通过给回归估计上增加一个偏差度,来降低标准误差。 上面,我们看到了线性回归方程。还记得吗? 它可以表示为:y=a+ b*x 这个方程也有一个误差项。完整的方程是: y=a+b*x+e (error term) , [error term is the value needed to correct for a prediction error between the observed and predicted value] => y=a+y= a+ b1x1+ b2x2+....+e, for multiple independent variables. 在一个线性方程中,预测误差可以分解为2个子分量。 一个是偏差, 一个是方差。 预测错误可能会由这两个分量或者这两个中的任何一个造成。 在这里,我们将讨论由方差所造成的有关误差。 岭回归通过收缩参数λ(lambda)解决多重共线性问题。 看下面的公式: 在这个公式中,有两个组成部分。 第一个是最小二乘项, 另一个是β2(β-平方)的λ倍,其中β是相关系数。 为了收缩参数把它添加到最小二乘项中以得到一个非常低的方差。 要点: 除常数项以外,这种回归的假设与最小二乘回归类似; 它收缩了相关系数的值,但没有达到零,这表明它没有特征选择功能,这是一个正则化方法,并且使用的是L2正则化。 6. 套索回归(Lasso Regression) 它类似于岭回归。 Lasso (Least Absolute Shrinkage and Selection Operator)也会惩罚回归系数的绝对值大小。 此外,它能够减少变化程度并提高线性回归模型的精度。 看看下面的公式: Lasso 回归与Ridge回归有一点不同,它使用的惩罚函数是绝对值,而不是平方。 这导致惩罚(或等于约束估计的绝对值之和)值使一些参数估计结果等于零。 使用惩罚值越大,进一步估计会使得缩小值趋近于零。 这将导致我们要从给定的n个变量中选择变量。 要点: • 除常数项以外,这种回归的假设与最小二乘回归类似 • 它收缩系数接近零(等于零),确实有助于特征选择 这是一个正则化方法,使用的是L1正则化 7. 回归(ElasticNet) ElasticNet是Lasso和Ridge回归技术的混合体。 它使用L1来训练并且L2优先作为正则化矩阵。 当有多个相关的特征时,ElasticNet是很有用的。 Lasso 会随机挑选他们其中的一个,而ElasticNet则会选择两个。 Lasso和Ridge之间的实际的优点是,它允许ElasticNet继承循环状态下Ridge的一些稳定性。 要点: 它可以承受双重收缩 • 选择变量的数目没有限制 • 在高度相关变量的情况下,它会产生群体效应 除了这7个最常用的回归技术,你也可以看看其他模型,如Bayesian、Ecological和Robust回归。 如何正确选择回归模型? 当你只知道一个或两个技术时,生活往往很简单。 我的老师曾告诉我,如果结果是连续的,就使用线性回归。 如果是二元的,就使用逻辑回归! 然而,在我们的处理中,可选择的越多,选择正确的一个就越难。 类似的情况下也发生在回归模型中。 在多类回归模型中,基于自变量和因变量的类型,数据的维数以及数据的其它基本特征的情况下,选择最合适的技术非常重要。 以下是你要选择正确的回归模型的关键因素: 1. 数据探索是构建预测模型的必然组成部分 在选择合适的模型时,比如识别变量的关系和影响时,它应该首选的一步。 2. 比较适合于不同模型的优点,我们可以分析不同的指标参数 如统计意义的参数,R-square,Adjusted R-square,AIC,BIC以及误差项,另一个是Mallows' Cp准则。 这个主要是通过将模型与所有可能的子模型进行对比(或谨慎选择他们),检查在你的模型中可能出现的偏差。 3. 交叉验证是评估预测模型最好额方法 在这里,将你的数据集分成两份(一份做训练和一份做验证)。 使用观测值和预测值之间的一个简单均方差来衡量你的预
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值