python模型检验_Python 机器学习及实践 Codeing 模型实用技巧 (特征提升 模型正则化 模型检测 超参数搜索)...

之前的数据都是经过了规范化处理,而且模型也大多数采用了默认的初始化配置

但是在世纪研究和工作种接触到的数据都是这样规整的吗?难道默认配置就最佳的吗?

3.1模型实用技巧

一旦我们确定使用某个模型 本书所提供的程序库就可以帮助我们从标准的训练数据种,依靠默认的配置学习到模型所需要的参数;

接下来,我们便可以利用这组得来的参数指导模型在测试数据上进行预测,进而对模型的表现进行评价

但是这套方案不能保证:

①所有用于训练的数据特征都是最好的

②学习得到的参数一定是最优的

③默认配置下的模型总是最佳的

Together 我们可以从多个角度对在前面使用过的模型进行性能提升 (预处理数据 控制参数 优化模型配置)

特征提升(特征抽取和特征筛选)

特征抽取

所谓特征抽取 就是逐条将原始数据转化维特征向量的形式 这个过程同时涉及对数据特征的量化表示

原始数据 :

1数字化的信号数据(声纹,图像)

2还有大量符号化的文本

①我们无法直接将符号化的文字本身用于计算任务 而是需要通过某些处理手段 ,预先将文本量化为特征向量

有些用符号表示的数据特征已经相对结构化,并且以字典这种数据结构进行存储。

这时我们使用DictVectorizer 对特征进行抽取和向量化

measurements=[{'city':'Dubai','temperature':33.},{'city':'London','temperature':12.},

{'city':'San Fransisco','temperature':18.}]from sklearn.feature_extraction importDictVectorizer

vec=DictVectorizer() #初始化DictVectorizer()特征抽取器

print(vec.fit_transform(measurements).toarray()) #输出转化后的特征矩阵

print(vec.get_feature_names()) #输出各个维度特征含义

#DictVectorizer()特征抽取器对类别型特征进行了one-hot处理,对数值型特征没做进一步处理

DiceVectorizer 对特征的处理方式(字典):

1类别行 使用0/1二值方式

2数字型 维持原始数值即可

②另外一些文本数据更为原始 知识一系列的字符串 我们采用词袋法对特征进行抽取和向量化

词袋法的两种计算方式

CountVectorizer

TfidVectorizer

(a.)CountVectorizer——每个词(Term)在该训练文本中出现的频率(Term Frequency);

(b.)TfidfVectorizer——除了考量某一词汇在当前文本中出现的频率(Term Frequency)外,还要关注包含这个词汇的文本条数的倒数(Inverse Document Frequency)。训练文本的条目越多,TfidfVectorizer这种特征量化的方式就更有优势,因为计算词频(Term Frequency)的目的在于找出对所在文本的含义更有贡献的重要词汇

如果一个词几乎在每篇文章中都出现,说明这个词是常用词,不会帮助模型对文本进行分类。此外,在每条文本中都出现的常用词汇成为停用词(Stop Words),停用词在文本特征抽取时需要过滤掉。

#使用CountVectorizer 并且在不去掉停用词的条件下,对文本进行量化的朴素贝叶斯分类性能预测

from sklearn.datasets import fetch_20newsgroups#20类新闻文本

from sklearn.model_selection importtrain_test_splitfrom sklearn.feature_extraction.text importCountVectorizerfrom sklearn.naive_bayes importMultinomialNBfrom sklearn.metrics importclassification_report

news=fetch_20newsgroups(subset='all')

X_train,X_test,y_train,y_test=train_test_split(news.data,news.target,test_size=0.25,random_state=33)

count_vec=CountVectorizer() #默认形式初始化词频统计器(不去停用词)

X_count_train=count_vec.fit_transform(X_train)

X_count_test=count_vec.transform(X_test)

mnb_count=MultinomialNB()

mnb_count.fit(X_count_train,y_train)#用朴素贝叶斯分类器对词频统计器(不去停用词)处理后的样本进行参数学习

print('The accuracy of classifying 20newsgroups using Naive Bayes(CountVectorizer without filtering stopwords):',

mnb_count.score(X_count_test,y_test))

y_count_predict=mnb_count.predict(X_count_test)print(classification_report(y_test,y_count_predict,target_names=news.target_names))

#使用TfidVectorizer 并且在不去掉停用词的条件下,对文本进行量化的朴素贝叶斯分类性能预测

from sklearn.datasets importfetch_20newsgroupsfrom sklearn.model_selection importtrain_test_splitfrom sklearn.feature_extraction.text importTfidfVectorizerfrom sklearn.naive_bayes importMultinomialNBfrom sklearn.metrics importclassification_report

news=fetch_20newsgroups(subset='all')

X_train,X_test,y_train,y_test=train_test_split(news.data,news.target,test_size=0.25,random_state=33)

tfidf_vec=TfidfVectorizer() #默认形式初始化tfidf统计器(不去停用词)

X_tfidf_train=tfidf_v

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值