2014年3月 ’ 的文章存档

Decision Tree 及实现

本文基于python逐步实现Decision Tree(决策树),分为以下几个步骤:

 

  • 加载数据集
  • 熵的计算
  • 根据最佳分割feature进行数据分割
  • 根据最大信息增益选择最佳分割feature
  • 递归构建决策树
  • 样本分类

 

关于决策树的理论方面本文几乎不讲,详情请google keywords:“决策树 信息增益  熵”

将分别体现于代码。

本文只建一个.py文件,所有代码都在这个py里

1.加载数据集

我们选用UCI经典Iris为例
阅读全文

C语言 内存分配 地址 指针 数组 参数 实例解析

目录

  • void 与 void 

1 void 简介
2 void简介

  • C 语言 程序内存分配

1 内存分区状况
2 内存分配方式
3 register变量
4 extern 变量
5 static变量 与 全局变量区别
6 堆 和 栈比较
7 各区分布情况

  • 指针与地址

1 与 操作
2 指针定义解析
3 指针运算及示例

  • 函数参数的传值调用和传址调用

1 传值调用 和 传址调用
2 高级示例

  • 指针 和 数组

—————————————————————–
阅读全文

Linux下网络测试及故障诊断方法及工具使用详解

目录

1、网络调试工具概说;
2、网络测试工具和方法;
2.1 网络测试工具 ping :
2.2 其它测试网络可用性的方法;
3、网络故障诊断工具和方法;
4、关于本文;

 

1、网络调试工具概说;

如果我们把一台机器接入网络中,通过网络配置工具的配置这时就要用到网络调试工具,目的是判断机器是否已经接入到网络以及网络连接是否正常。我们常用的在各个发行版通用的网络配置工具是ifconfig和netconfig,当然Linux各大发行版本又有自己的配置工具,这些特定发行版特别的配置工具是非常有效的,大多是图形界面的,操作也非常之简单。
阅读全文

开源日志系统比较

1. 背景介绍

 

许多公司的平台每天会产生大量的日志(一般为流式数据,如,搜索引擎的pv,查询等),处理这些日志需要特定的日志系统,一般而言,这些系统需要具有以下特征:

(1) 构建应用系统和分析系统的桥梁,并将它们之间的关联解耦;

(2) 支持近实时的在线分析系统和类似于Hadoop之类的离线分析系统;

(3) 具有高可扩展性。即:当数据量增加时,可以通过增加节点进行水平扩展。

本文从设计架构,负载均衡,可扩展性和容错性等方面对比了当今开源的日志系统,包括facebook的scribe,apache的chukwa,linkedin的kafka和cloudera的flume等。
阅读全文

领导如何应对员工离职

不少朋友都提到,手下的员工离职往往是让人非常头痛的事情。这大概是管理岗位经常需要面对的一种麻烦,这个问题也困扰过我。为了帮助仍然被困扰的各位同仁,下面提供我的经验给大家参考。要说明的是,因为我和朋友们几乎都在IT行业,“员工离职”的大部分情况也就直接体现为“程序员离职”,所以我主要讲的还是应对程序员离职的经验,其它行业的朋友可以自行参考。

要妥善应对员工的离职,首先应该问的问题是:员工为什么离职?但是,这么提问往往容易将大家的思维引入极端,得到“他家里有事”、“他不爽薪水”之类的个例答案,而偏离了关于问题的本质。所以我们不妨换个问法:在什么情况下,员工不会离职?我的朋友 @jackyexin 给出的答案是,员工不离职,必须满足两个条件:第一,员工觉得公司有发展;第二,员工觉得自己有发展。我觉得很直接很可靠,也为我的经验所验证,所以,下面结合我的经验谈谈这两个条件。

第一,让员工觉得公司有发展,也就是让员工了解自己手头工作之外,公司的情况。许多人虽然整日在公司工作,但自己工作之外的情况如何,他们其实是不清楚的。虽然有些人说“干好自己的事情就好了,公司怎么样不由我操心”,但真正“毫不关心”的人其实占少数,大部分人或多或少还是会关心这些情况,否则就不会有风言风语导致员工大批离职的现象了。只是平时,一般员工并没有合适的渠道了解这类情况。
阅读全文

我是如何学习计算机编程的

我在很小年纪的时候就开始学习编程,我学习编程的方法是创建大量的不同的网站。下面列出的是我创建的主要的网站,其中最早的一个是我11岁时开发的。我希望读者能从我这些复述中获得的信息是:如果你想学习编程,做大量的练习性的项目是非常必要的。

学习一种技术最好的方法就是练习,练习,练习。所有我知道的最优秀的程序员都深深的享受编程——编程是一件让他们干起来无由的高兴的事情。也因此他们大量的编程。经常,那是一种不健康的废寝忘食。学习如何编程——以及如何编程——并不需要你具有超人的能力。你只需要去按照自己的意愿动手去做,做出点什么东西。

做什么东西并不重要,重要的是你找到东西动手去做。我所认识的那些优秀的程序员,他们都有各自不同的最初学习编程的动机。有些人学习编程是为了开发动画游戏。有些人是为了解决他们在使用计算机时遇到的问题,或让工作更有效率。有些人是为了开发产品来满足人们的需求。有些人(真正的程序员)学习编程只是他们为了深入了解计算机工作原理的步骤之一 ;他们希望能搞清楚这种机器。有些程序员编程只是因为他们享受解决难题的挑战。
阅读全文

程序员的工作效率:Emacs vs IntelliJ IDEA

我用 Emacs 写了 7 年的 C++ 代码。 4 年前,当我换了工作,开始使用 IntelliJ IDEA 转向 Java 开发。毫无疑问,比起 Emacs,我在 IntelliJ IDEA 上写代码更有效率。

导航

代码好像真的是80%由导航生成,只有20%是实际写作的结果,IntelliJ IDEA的真正亮点所在是导航到代码库。例如,假设你要添加功能到现有的类,即使你对那个类很熟悉,你还是需要检查新代码该放在哪里比较合适,需要添加一 个新的声明吗?还有什么其他的类在使用你现在修改的方法?这些都需要查看现有代码。

甚至在你写代码时也会有很多导航,你想要使用的那个方法的名称是什么?参数的序列是什么-是先有一个string,然后一个
整型,或是其他方式?枚举可能的取值是什么?

有一些些导航存在于一个文件中,而在一个文件中我最常用的操作有:跳转到文件的顶部或底部,转到一行的开始或结束,选择文本,剪切,复制,粘贴,向前向后搜索,注释以及取消注释代码。 Emacs 和IntelliJ IDEA对这些操作都有很好的
命令和快捷键支持。

但是,当涉及到文件之间的导航时,IntelliJ IDEA就有很大的优势。其中一个最有用的命令是Ctrl + B(转到声明),正如其名所暗示的,你可以转到变量,方法,以及类的声明处,即使它在另一个文件中。Ctrl + Alt + 左键可以返回上一级,我时刻都在用它,经常会在跳几级后回到开始的地方。
阅读全文

这个项目到底要多久开发完成?

b1

这个问题是我最常碰到的一个,也是我最难回答的一个。对这种问题最好的回答方式是用全职员工来推算天数。这非常容易,你只需要找出有多少个不重叠的 功能特征,然后每个人负责一个。一旦各个功能块被分成了不能再分的任务,你计算需要多少人天,这就是你的答案。你无论如何都不可能用比这更少的时间开发完 这个项目。

“一个女人生一个孩子要10个月,不论你再增加多少个女人来做这事,都不会缩短这个时间”

“只有当一个任务的完成可以分配多人,并且不需要他们之间相互交流合作的情况下能完成时,人和月才能互相替换。”

“往一个已经延迟的项目里添加程序员只会使项目进一步延迟”(因为项目中现有的人需要培训新来的人)

-《人月神话》

不幸的是,大部分人只想知道一个项目需要多少时间完成。这实际是个伪命题,因为90%软件成本的产生是发生在软件发布之后。这些费用会产生于修复bug、增加欠缺的功能、性能的改进、对新平台进行支持(安卓就是一个大债主)或重写质量差的老代码来减少技术债务。即使是项目发布前,对于如何合适的处理每一种报错情况,这也是无法预先估计全的。从某种程度上,你就是被别人问了这样一个问题:“我有一个问题,我想解决它,但我无法说清问题是什么。请问解决这个问题需要多少时间?”
阅读全文

玩转字符串

注:本文翻译自 objc.io,原文链接是:Working with Strings 。部分翻译工作由 @riven 和 @唯木念 完成,向他们表示感谢。

 

在每个应用里我们都大量使用字符串。下面我们将快速看看一些常见的操作字符串的方法,过一遍常见操作的最佳实践。

字符串的比较、搜索和排序

排序和比较字符串比第一眼看上去要复杂得多。不只是因为字符串可以包含代理对(surrogate pairs )(详见 Ole 写的这篇关于 Unicode 的文章) ,而且比较还与字符串的本地化相关。在某些极端情况下相当棘手。
阅读全文

能花钱的,就不要花时间

q

 

如果要寻找这个星球上最抠门的群体,那么一定非程序员们莫属了。有个笑话是找对象要找程序员:『挣得多,花的少;常加班,死的早』。

在创业之前,我也是个抠门的主。公司给配笔记本,就绝不自己买。一个N73用三年如果不是丢了就不会买新的。东西永远是够用就好,而不管是否在技术上已经落伍;为了找一款软件的sn,我可以花上一个小时,不厌其烦地注册有sn的论坛,攒积分下载,尽管该软件的正版价也就几十人民币。

值得庆幸的是,这种抠门的劲儿在11年终于得到了改观。
阅读全文