机器学习-贝叶斯

本文介绍了Python中删除字符串空白符的方法,涉及split和join操作。此外,讲解了str.maketrans和translate函数的用法,包括字符替换和删除。接着讨论了机器学习中的贝叶斯方法,如sklearn的MultinomialNB分类器。最后提到了文本处理技术,如jieba分词和关键词提取,并展示了classification_report在评估分类器性能中的作用。
摘要由CSDN通过智能技术生成

贝叶斯相关知识见笔记:贝叶斯
知识点:
1
Python中有时候需要删除一个字符串中的空白符(包括空格、制表、回车),这时候可以先对字符串做split操作,然后做join操作:
示例:
str1=‘ab c\tde\nfg’
str1.split()
[‘ab’, ‘c’, ‘de’, ‘fg’]
‘’.join(str1.split())
‘abcdefg’
2
输出结果中出现乱码:需要给open函数传入encoding参数,
with open(’…/dataconfig/test.json’,encoding=‘utf-8’) as f:
3
str.marktrans方法:生成一个dict表。对应翻译表(asc码格式),
translate方法:就是把原始str中每个字符用对照翻译表中字符对应替换掉,对应None的就表示删除
def test_maketrans_translate():
# maketrans方法返回类型:字典,基本功能就是将字符串每个字符转为asc码
# 如果提供一个参数:这个参数就必须是字典,方法将字典的key转换成asc码后返回。
a=str.maketrans({1:‘b’,3:‘d’})
print (type(a),a) #< class ‘dict’> {1: ‘b’, 3: ‘d’}
a = str.maketrans({‘1’: ‘b’, ‘3’: ‘d’})
print(type(a), a) # <class ‘dict’> {49: ‘b’, 51: ‘d’}
#如果提供二个参数:两个参数都必须是字符串,而且要长度一样。
b=str.maketrans(‘abcdefg’,‘1234567’)
print(type(b),b) # <class ‘dict’> {97: 49, 98: 50, 99: 51, 100: 52, 101: 53, 102: 54, 103: 55}
# b = str.maketrans(‘abcdefg’, ‘12345’)
# print(type(b), b) # 报错,the first two maketrans arguments must have equal length(前两个参数必须一样长)
# 如果提供三个参数:
# 第一、二个参数和上面一样
# 第三个参数:需要设置为None的字符。
# 如果第一个参数中有第三个参数中的字符就忽略,然后将第三个参数中的所有字符直接对应为None
# 通常使用这个参数都是为 提供给translate函数从某字符串中删除这个参数中包含的特定字符用。
c = str.maketrans(‘abcdefghi’, ‘123456789’,“abfgjk”)
print(“2=”, type©, c) # <class ‘dict’> {97: None, 98: None, 99: 51, 100: 52, 101: 53, 102: None, 103: None, 104: 56, 105: 57, 106: None, 107: None}
# 本来a、b、f、g 字符对应的是1、2,6,7,但是由于第三参数abfg 定义了这4个字符被忽略,因此结果中出现了97:None,98:None…102:None,103:None
# 同时在第三个参数中"jk"还有两个字符,因此结果中还多出了 106: None, 107: None
c= str.maketrans(‘ab’, ‘AB’, “b”)
print(“3=” ,type©, c) # <class ‘dict’> {97: 65, 98: None} # <class ‘dict’> {97: 65, 98: None}
# translate 方法
# translate方法返回:字符串,实际就是把原始str中每个字符用对照表中字符对应替换,对照表中None的字符实际效果就是被删除了
# str.translate(table[, deletechars]);
# 参数:# table – 对照翻译表,翻译表是通过maketrans方法转换而来。 # deletechars – 字符串中要过滤的字符列表。
import string
s1 = “abcdefg”
# 更换字符
t1= str.maketrans(‘abc’, ‘ABC’,) # 生成了一个对照翻译表,说明a换成A,b换成B…
print(“4 替换:”+ s1+"->",s1.translate(t1)) # abcdefg-> ABCdefg
# 删除字符(实际就是生成 字符对应None的翻译表)
t1=str.maketrans("","",“abc”) #即删除abc实际生成了{97:None,98:None,99:None}的对应翻译表
print(“5 删除:”+ s1+"->",s1.translate(t1)) # 删除:abcdefg-> defg
4:
string.ascii_letters方法的作用是生成全部字母,包括a-z,A-Z
string.digits方法的作用是生成数组,包括0-9
5:
利用字典的fromkeys方法,传入一个列表代表键位。方法一:初始化没有值的字典,键对应的默认值为 “None”代表空值dic1={}.fromkeys([“a”,“b”,“c”])方法二:根据键初始化字典的同时初始化一个默认值dic1={}.fromkeys([“a”,“b”,“c”],“老刘”)这里初始化后,每个键对应的值都将变为“老刘”。
6:jieba
(1)分词:可使用 jieba.cut 和 jieba.cut_for_search 方法进行分词,两者所返回的结构都是一个可迭代的 generator,可使用 for 循环来获得分词后得到的每一个词语(unicode),或者直接使用 jieba.lcut 以及 jieba.lcut_for_search 直接返回 list
3 种分词模式:精确模式、全模式、搜索引擎模式
支持繁体分词
支持自定义词典
seg_list = jieba.cut(“他来到上海交通大学”, cut_all=True)
(2)也可添加自定义词典:
使用 jieba.load_userdict(file_name) 即可载入词典,# file_name 为文件类对象或自定义词典的路径。格式:词语 词频(可省略) 词性(可省略)
使用 add_word(word, freq=None, tag=None) 和 del_word(word) 可在程序中动态修改词典,如:
ieba.add_word(‘石墨烯’) #增加自定义词语
jieba.add_word(‘凱特琳’, freq=42, tag=‘nz’) #设置词频和词性
jieba.del_word(‘自定义词’) #删除自定义词语
使用 suggest_freq(segment, tune=True) 可调节单个词语的词频,使其能(或不能)被分出来。jieba.suggest_freq((‘中’, ‘将’), True)
(3)关键字提取
jieba 提供了两种关键词提取方法,分别基于 TF-IDF 算法和 TextRank 算法
3.1:TF-IDF(Term Frequency-Inverse Document Frequency, 词频-逆文件频率)是一种统计方法,用以评估一个词语对于一个文件集或一个语料库中的一份文件的重要程度,其原理可概括为:一个词语在一篇文章中出现次数越多,同时在所有文档中出现次数越少,越能够代表该文章。计算公式:TF-IDF = TF * IDF(某一个给定的词语在该文件中出现的次数;逆文件频率,如果包含词条的文件越少,则说明词条具有很好的类别区分能力,) jieba.analyse.extract_tags 方法可以基于 TF-IDF 算法进行关键词提取:for x, w in anls.extract_tags(s, topK=20, withWeight=True):(topK:为返回几个 TF/IDF 权重最大的关键词,默认值为 20,withWeight:是否一并返回关键词权重值,默认值为 False,allowPOS:仅包括指定词性的词,默认值为空)
3.2:通过 jieba.analyse.textrank 方法可以使用基于 TextRank 算法的关键词提取,其与 ‘jieba.analyse.extract_tags’ 有一样的参数,但前者默认过滤词性(allowPOS=(‘ns’, ‘n’, ‘vn’, ‘v’))
7:CountVectorizer
是通过fit_transform函数将文本中的词语转换为词频矩阵,矩阵元素a[i][j] 表示j词在第i个文本下的词频。即各个词语出现的次数,通过get_feature_names()可看到所有文本的关键字,通过toarray()可看到词频矩阵的结果。
用法:
texts=[“dog cat fish”,“dog cat cat”,“fish bird”, ‘bird’] # “dog cat fish” 为输入列表元素,即代表一个文章的字符串
cv = CountVectorizer()#创建词袋数据结构
cv_fit=cv.fit_transform(texts)
print(cv.get_feature_names()) #[‘bird’, ‘cat’, ‘dog’, ‘fish’] 列表形式呈现文章生成的词典
print(cv.vocabulary_ ) # {‘dog’:2,‘cat’:1,‘fish’:3,‘bird’:0} 字典形式呈现,key:词,value:词频
print(cv_fit)
#(0,3) 1 第0个列表元素,词典中索引为3的元素, 词频
print(cv_fit.toarray()) #.toarray() 是将结果转化为稀疏矩阵矩阵的表示方式;
print(cv_fit.toarray().sum(axis=0)) #每个词在所有文档中的词频
8
sklearn.naive_bayes.MultinomialNB()函数全称是先验为多项式分布的朴素贝叶斯。
一般来说,如果样本特征的分布大部分是连续值,使用GaussianNB会比较好。如果如果样本特征的分大部分是多元离散值,使用MultinomialNB比较合适。而如果样本特征是二元离散值或者很稀疏的多元离散值,应该使用BernoulliNB
MultinomialNB假设特征的先验概率为多项式分布,即如下式:

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值