第一节:机器学习
D={X,y}
x:特征y:标签f:学习x到y的映射关系
1、机器学习定义:
自动从已有的数据里找出一些规律(与专家系统的区别),然后把学到的这些规律应用到对未来数据的预测值,或者在不确定环境下自动地做出一些决策。
2、Supervised learning
给定一批数据,包含一些样本的特征向量和标签值。学习特征向量到标签值的映射关系。
2.1 Sentiment Classification
线性回归逻辑回归朴素贝叶斯神经网络SVM随机森林AdaboostCNN3、Unsupervised learning
对数据的分析,根据数据特征对其进行分类。
k-meansPCAICAMF : 矩阵分解LSALDA: 通过分析文本,分析文本后的主题
4、Generative model VS Discriminative Model
生成模型:训练好的模型,可以生成一些数据,记住每一个样本的特征 p(x,y),p(x)
判别模型:学习两个样本不同的特征 p(y|x)
5、Working Pipeline of constructing models
给定数据数据清洗特征工程:时间很长建模预测End-to-end learning:不做特征工程,直接输入数据,比如Seq2seq
6、Train and Test Data
交叉验证在train set 上加入validation set:做超参数调参
第二节:朴素贝叶斯:适合文本分类
1、垃圾邮件分类器
occurrence of 购买
每个邮件包含十个单词,正常邮件有24个,垃圾邮件有12个。
统计正常邮件中出现购买的概率
统计垃圾邮件中出现购买的概率
p(购买|正常):3/240
p(购买|垃圾):7/120
可以计算出每个单词的条件概率,对词库里每个单词计算条件概率
prior information(先验)
在该例子里,正常邮件/垃圾邮件占所有邮件的比例
2、贝叶斯定理
3、conditional independence
当x和y条件独立于z时
Make prediction
第三节:Case study 垃圾邮件过滤
计算先验概率列出词库对于没有出现的单词,它的条件概率需要加入laplace 平滑对于词库/新邮件里的每个单词,计算它在正常和垃圾邮件中出现的条件概率对比给定这些单词下,是垃圾邮件还是正常邮件的概率,哪个大就认为该新邮件属于哪个类别。当遇到这个新邮件的词很多,做条件概率乘法时,可能值很小,可以使用log将logp1p2p3=logp1+logp2+logp3
第四节:python函数高阶函数的应用
1、lambda表达式:匿名函数
格式:lambda 参数列表:函数体
add_lambda=lambda x,y:x+y#调用add_lambda(3,4)#输出:7
三元运算符
condition=Trueprint(1 if condition else 2)#结果1
2、map函数的应用
输入一堆input,经过map函数,输出后返回对应的input的output
如何使用map
list1=[1,2,3,4,5]r=map(lambda x:x+x,list1)print(list2)# 结果 [2,4,6,8,10]
m1=map(lambda x,y:x*x+y,[1,2,3,4,5],[1,2,3,4,5])#result:[2,6,12,20,30]
3、filter过滤器
输入一些input,经过filter的一些条件筛选,过滤掉一些不符合条件的input
def is_not_none(s):return s and len(s.strip())>0list2=[" "," ","hello","greedy",None,"AI" ]result=filter(is_not_none,list2) #传入一个条件函数和一个可迭代对象#result : ["hello","greedy","ai"]
4、reduce函数
将input输入,经过reduce函数,输出一个output
from functools import reducef= lambda x,y:x+yr=reduce(f,[1,2,3,4,5],10)#10为初始化的值# result:25
5、Python三大推导式
5.1 列表推导式
根据已有的列表推导出新的列表
list1=[1,2,3,4,5]f=map(lambda x:x+x,list1)#此时为map的对象#需要转换格式list(f)list2=[i*i for i in list 1]print(list2)# [1,4,9,16,25]#有选择性的筛选list4=[i*i for in list1 if i >3]print(list4)# [16,25]
5.2 集合推导式
list1={1,2,3,4,5}f=map(lambda x:x+x,list1)#此时为map的对象#需要转换格式list(f)list2={i*i for i in list 1}print(list2)# {1,4,9,16,25}#有选择性的筛选list4={i*i for in list1 if i >3}print(list4)# {16,25}
5.3 字典推导式
s-={"zhangsan":20,"lisi":15,"wangwu":34}#拿出所有的keys_key=[key+“aaa” for key, value in s.items()] #for后面有两个value# key和value颠倒s1={value: key for key , value in s.items()}#只拿出符合条件的值s2={key:value for key,value in s.items if key=="lisi"}#15:"lisi"
6、闭包
一个返回值是函数的函数
#调用后打印当前时间import timedef runtime():def now_time():print (time.time())return now_timef=runtime()print(f())
使用f调用runtime函数,再调用f函数。
data.csv
cat data.csv#读出一个文件中带有某个关键字的行def make_filter(keep):def the_filter(file_name):file=open(file_name)lines=file.readlines()file.close()filter_doc=[i for i in lines if keep in i]return filter_docreturn the filterfilter1=make_filter("8")#这一行调用了make_filter函数,接受了the filter作为返回值#这里的filter1等于函数the_filterfilter_result=filter1("data.csv")print(filter_result)# [6,7,8,9,19]