拷贝是对于可变对象list而言的,非容器类型(如数字、字符串、和其他’原子’类型的对象)是没有拷贝这个说法的

赋值

1
2
3
4
>>> a = [1,2,3,[4,5]]
>>> b = a
>>> a is b
True

b是a的别名,指向一个地址

阅读全文 »

5 steps to solve DP:

1.subprobs
2.guess
3.recurrence
4.order
5.orig prob

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
'''
Find the contiguous subarray within an array (containing at least one number) which has the largest sum.
For example, given the array [-2,1,-3,4,-1,2,1,-5,4],
the contiguous subarray [4,-1,2,1] has the largest sum = 6.
5 steps to DP:
1.subprobs: dp(i)-> maxsubarray in nums[:i]
2.guess: for each nums[i] add it or not.
3.recurrence: dp(i)=max(nums[i]+dp(i-1),nums[i])
4.order: for i=1,..,n: dp(i)
5.orig prob: dp(n)
'''

class Solution(object):
def maxSubArray(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
curSum = maxSum = nums[0]
for num in nums[1:]:
curSum = max(num, curSum + num)
maxSum = max(maxSum, curSum)

return maxSum

构造决策树

第一个问题:当前数据集上哪个特征在划分数据分类时起决定作用?为此需要一个评估标准.

划分的大原则是:将无序的数据变得有序.

划分之后接着划分,递归.

递归结束条件:程序遍历完所有划分数据集的属性或者分支下的数据均为一个类型.

为了度量引入了信息论的东西,也就是熵.

信息的定义:如果待分类的事务可能划分在多个分类中,则符号xi的信息定义为:
$$
l(x_i)=-\log_2 p(x_i),
$$

其中p(xi)是选择该分类的概率.

熵是信息的期望值.我们需要计算所有类别所有可能值包含的信息期望值:
$$
H=-\sum_{i=1}^n p(x_i)\log_2 p(x_i),
$$

其中,n为样本分类.

另外

数据最好是标称型的 ;(对于ID3算法,数值型数据最好是离散的.

出现过拟合时,可以剪枝.

剪枝策略,预剪枝或者后剪枝.

别的决策数算法,C4.5|CART.

https://github.com/yikayiyo/machinelearninginaction/blob/master/Ch03/trees.py

摘要

  义元是语义上的最小单位,单词的每一个含义通常都是很多义元组合而成的。为了让每个词义的义元更加确切,人们进行了手工标注,并构建了常识性的语言知识库。这篇文章指出,单词的义元信息可以改善词表示学习(一种将单词映射到低维语义空间的技术,是许多NLP任务的一个基本步骤)。关键点在于利用义元信息准确捕捉单词在特定语境下的确切含义。具体说来,作者拓展了skip-gram框架,提出了三种义元编码模型来学习sememes-senses-words的表示,

阅读全文 »

条件表达式

一般情况下,条件分支只有简单的返回或对同一变量进行赋值操作时,可以转为条件表达式.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#1.改写条件语句
if x > 0:
y = math.log(x)
else:
y = float('nan')
#简洁写法
y = math.log(x) if x > 0 else float('nan')


#2.改写递归函数
def fac(x):
if x == 0:
return 1
else:
return x * fac(x-1)
#简洁写法
def fac(x):
return 1 if x == 0 else x * fac(x-1)

列表解析(list comprehension)

将一个列表转为另一个时用更少的代码

阅读全文 »
0%