查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

互联网产品经理的窝

梦想社:一个人为了梦想,始终没有停下自己的脚步

 
 
 
 
 
 

如何选择机器学习分类器?

2014-7-29 19:50:49 阅读570 评论0 292014/07 July29

你知道如何为你的分类问题选择合适的机器学习算法吗?当然,如果你真正关心准确率,那么最佳方法是测试各种不同的算法(同时还要确保对每个算法测试不同参数),然后通过交叉验证选择最好的一个。但是,如果你只是为你的问题寻找一个“足够好”的算法,或者一个起点,这里有一些我这些年发现的还不错的一般准则。

你的训练集有多大?

如果训练集很小,那么高偏差/低方差分类器(如朴素贝叶斯分类器)要优于低偏差/高方差分类器(如k近邻分类器),因为后者容易过拟合。然而,随着训练集的增大,低偏差/高方差分类器将开始胜出(它们具有较低的渐近误差),因为高偏差分类器不足以提供准确的模型。

你也可以认为这是生成模型与判别模型的区别。

一些特定算法的优点

朴素贝叶斯的优点:超级简单,你只是在做一串计算。如果朴素贝叶斯(NB)条件独立性假设成立,相比于逻辑回归这类的判别模型,朴素贝叶斯分类器将收敛得更快,所以你只需要较小的训练集。而且,即使NB假设不成立,朴素贝叶斯分类器在实践方面仍然表现很好。如果想得到简单快捷的执行效果,这将是个好的选择。它的主要缺点是,不能学习特征之间的相互作用(比如,它不能学习出:虽然你喜欢布拉德·皮特和汤姆·克鲁斯的电影,但却不喜欢他们一起合作的电影)。

逻辑回归的优点:有许多正则化模型的方法,你不需要像在朴素贝叶斯分类器中那样担心特征间的相互关联性。与决策树和支撑向量机不同,你还可以有一个很好的概率解释,并能容易地更新模型来吸收新数据(使用一个在线梯度下降方法)。如果你想要一个概率框架(比如,简单地调整分类

作者  | 2014-7-29 19:50:49 | 阅读(570) |评论(0) | 阅读全文>>

Matplotlib Tutorial(译)

2013-6-3 21:49:44 阅读16816 评论0 32013/06 June3

这个教程基于可以从scipy lecture note得到的 Mike Müller的教程

源代码可从这里获得。图像在figures文件夹内,所有的脚本位于scripts文件夹。

所有的代码和材料以Creative Commons Attribution 3.0 United States License (CC-by)发布。

特别感谢Bill Wing和Christoph Deil的检查和校正。

引言

matplotlib大概是被使用最多的二维绘图Python包。它不仅提供一个非常快捷的用python可视化数据的方法,而且提供了出版质量的多种格式图像。我们将要探索matplotlib包含最常见情况的交互模式。

Ipython 和 pylab模式

IPython是一个增强的Python交互shell,它拥有很多有趣的特性包括被命名的输入与输出,可使用shell命令,增强的调试和许多其它特性。当我们在命令参数中用-pylab(自从IPython0.12版变成--pylab),它容许交互的matplotlib会话有像Matlab/Mathematica样的功能。

pylab

pylab提供了一个针对matplotlib面向对象绘图库的程序界面。它模仿Matlab(TM)开发。因此,pylab大部分的绘图命令和参数和Matlab(TM)相似。重要的命令被交互示例解释。

简单绘图

作者  | 2013-6-3 21:49:44 | 阅读(16816) |评论(0) | 阅读全文>>

python-django的中文编码总结

2013-6-2 19:43:45 阅读598 评论0 22013/06 June2

最近在使用django的过程中,发现之前对中文编码的理解并不怎么正确,在此记录一下。

1.在所有需要显式使用中文的地方加上#-*- coding: UTF-8 -*-标识,(包括注释中的中文和代码中字符串的中文) 

2.django在db中存储的数据是经过encode的,但是通过模型取出的数据,是经过decode的。 

3.python中在进行字符串连接的时候,必须保证所有的子字符串编码或者未编码一致

OK,先从最简单的赋值开始。如下代码:

#!/usr/bin/python 

#-*- coding: UTF-8 -*- 

import logging 

logging.basicConfig(level=logging.DEBUG, 

        format='%(asctime)s %(levelname)s %(message)s', 

        filename='log.txt', 

        filemode='a+') 

x = '我爱你' 

作者  | 2013-6-2 19:43:45 | 阅读(598) |评论(0) | 阅读全文>>

Python教程:numpy的基本介绍

2013-6-2 19:15:36 阅读5405 评论0 22013/06 June2

标准安装的Python中用列表(list)保存一组值,可以用来当作数组使用,不过由于列表的元素可以是任何对象,因此列表中所保存的是对象的指针。这样为了保存一个简单的[1,2,3],需要有3个指针和三个整数对象。对于数值运算来说这种结构显然比较浪费内存和CPU计算时间。

此外Python还提供了一个array模块,array对象和列表不同,它直接保存数值,和C语言的一维数组比较类似。但是由于它不支持多维,也没有各种运算函数,因此也不适合做数值运算。

NumPy的诞生弥补了这些不足,NumPy提供了两种基本的对象:ndarray(N-dimensional array object)和 ufunc(universal function object)。ndarray(下文统一称之为数组)是存储单一数据类型的多维数组,而ufunc则是能够对数组进行处理的函数

简单的示范

1

2

3

4

5

6

7

8

9

10

import numpy as np

a = np.arange(10)

print(a)

a.reshape(2,5)

print(a)

print(a.dtype)

print(a.shape)

print(a.ndim)

print(a.size)

print(type(a))

作者  | 2013-6-2 19:15:36 | 阅读(5405) |评论(0) | 阅读全文>>

python sorted 函数小结

2013-5-30 20:04:16 阅读331 评论0 302013/05 May30

我们需要对List进行排序,Python提供了两个方法

对给定的List L进行排序,

方法1.用List的成员函数sort进行排序

方法2.用built-in函数sorted进行排序(从2.4开始)

--------------------------------sorted---------------------------------------

>>> help(sorted)

Help on built-in function sorted in module __builtin__:

sorted(...)

    sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list

---------------------------------sort----------------------------------------

>>> help(list.sort)

Help on method_descriptor:

sort(...)

    L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*;

作者  | 2013-5-30 20:04:16 | 阅读(331) |评论(0) | 阅读全文>>

python encode & decode 函数说明

2013-5-25 0:15:34 阅读434 评论0 252013/05 May25

字符串编码常用类型:utf-8,gb2312,cp936,gbk等。

python中,我们使用decode()和encode()来进行解码和编码

在python中,使用unicode类型作为编码的基础类型。即

decode              encode

str ---------> unicode --------->str

u = u'中文' #显示指定unicode类型对象u str = u.encode('gb2312') #以gb2312编码对unicode对像进行编码

str1 = u.encode('gbk') #以gbk编码对unicode对像进行编码

str2 = u.encode('utf-8') #以utf-8编码对unicode对像进行编码 u1 = str.decode('gb2312')#以gb2312编码对字符串str进行解码,以获取unicode u2 = str.decode('utf-8')#如果以utf-8的编码对str进行解码得到的结果,将无法还原原来的unicode类型

如上面代码,str\str1\str2均为字符串类型(str),给字符串操作带来较大的复杂性。

好消息来了,对,那就是python3,在新版本的python3中,取消了unicode类型,代替它的是

作者  | 2013-5-25 0:15:34 | 阅读(434) |评论(0) | 阅读全文>>

python中的函数编程

2013-5-22 21:05:40 阅读309 评论0 222013/05 May22

1、 Lambda 形式

通过lambda关键字,可以创建很小的匿名函数。这里有一个函数返回它的两个参数的和:“lambda a, b: a+b”。 Lambda 形式可以用于任何需要的函数对象。出于语法限制,它们只能有一个单独的表达式。语义上讲,它们只是普通函数定义中的一个语法技巧。

Code

>>> def make_incrementor(n):

return lambda x: x + n

>>> f = make_incrementor(42)

>>> f(0)

42

>>> f(1)

43

2、apply

简化函数调用。将list或者dict传递给函数的参数。

apply(模块.函数名,(参数1,参数2,。。。))

apply(模块.函数名,(),{"参数1“:值1;”参数2“:值2})

Code

>>> def Fun(a, b):

print a, b

>>>a = ("1", "2")

>>>Fun(a[0], a[1])

//使用apply函数后,变为

>>> apply(Fun, a)

作者  | 2013-5-22 21:05:40 | 阅读(309) |评论(0) | 阅读全文>>

Python 学习笔记 - 14.技巧(Tips)

2013-5-22 21:03:25 阅读279 评论0 222013/05 May22

多变量赋值

Code

>>>>>> a = b = c = 1

>>>>>> print a, b, c

1 1 1

>>>>>> (a, b, c) = range(3)

>>>>>> print a, b, c

0 1 2

>>>>>> (a, b, c) = ("a", "b", "c")

>>>>>> print a, b, c

a b c

连接字符串

Code

>>>>>> (a, b, c) = ("a", "b", "c")

>>>>>> print a, b, c

a b c

>>>>>> s = ("a", "b", "c")

>>>>>> ",".join(s)

'a,b,c'

>>>>>> s = {1:"a", 2:"b", 3:"c"}

>>>>>> ",".join(["%d:%s" % (k, v) for k, v in s.items()])

'1:a,2:b,3:c'

使用 0 < i < 10 要比 使用 i > 0 and i < 10 性能更好一些

Code

>>>>>> def test(i):

if (0 < i < 10):

print "ok"

else:

print ""

>>>>>> test(4)

作者  | 2013-5-22 21:03:25 | 阅读(279) |评论(0) | 阅读全文>>

查看所有日志>>

 
 
 
 
 
 

日历

 
 
模块内容加载中...
 
 
 
 
 

日志分类

 
 
日志分类列表加载中...
 
 
 
 
 

归档

 
 
数据加载中...
 
 
 
 
 
 
 

海外 日本 双鱼座

 发消息  写留言

 
博客等级加载中...
今日访问加载中...
总访问量加载中...
最后登录加载中...
 
 
 
 
 
 
 
 
 
 
 
网易云音乐 曲目表歌词秀
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Country Flags

 
 
模块内容加载中...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018

注册 登录  
 加关注