2020-12-28 11:13:36 阅读(221)
在最后一篇文章中,我们介绍了正式的数据源。通过pandas提供的一些dataframe函数,我们对数据进行了初步观察。然后,基于matplotlib提供的scatter散点图函数,我们逐一观察了可能发挥预测作用的部分特征的最原始分布关系,然后用多种分类模型算法逐一完成了从训练到预测再到模型评估的过程。一般来说,基本过程已经过去了。至少让每个人都知道最简单的过程是什么。事实上,这并不神秘。但这确实是最简单的过程,我们不知道有更深层次的惯例。因此,接下来,我们应该尝试看看如何使用文本类的特征,是否有更合理的特征选择方法,如何调整模型的参数,并仅仅依靠train_test当然,无论是否有更合理的方法来分割数据,然后进行训练和验证,是否有其他更合理的方法来观察效果,以及如何评估和选择最终的预测结果。然后补充这些,我们将从零开始梳理完整的机器学习过程,基于这些CASE,基于这个CASE也可以完成一个完整的过程。在02文本分类的最后一篇文章中,我们几乎使用了可能影响性别的数值和LABEL特征,只有少数文本特征不敢开始。包括随机选择的推文text、账户描述信息description和账户昵称。文本特征不同于传统的数值特征,数值特征是一个非常标准的模型输入格式,类型特征只需要做字典编码,也可以转换为有限的数字特征,只有一段文本特征,以及账户昵称。文本特征不同于传统的数值特征,数值特征是一个非常规的模型输入格式,而类型特征是一个非常标准的特征,类型特征也只需要做字典编码,也可以模仿为有限的数字类型特征。the”“a”“are“等等。一般来说,这些词对类别的判断没有多大帮助,但它们会影响标记的性能。毕竟,最终拆卸的标记维度会更多,并形成干扰。因此,鉴于文本的特征,首先是单词分割,然后是停止单词的过滤。此外,由于句子中单词的重用性,同一标记将不可避免地出现多次,特别是一些长文本,这是一个非常常见的情况。仅仅依靠是否出现来进行特征是不够的。我们可以尝试量化特征在特征阶段的重要性,并给出不同的权重,这必然会在实际预测中带来积极的影响。对于单词的权重,标记sklearn.feature_extraction.text提供了两种常规方法,一种是词频统计,很容易理解,即以词频的数量为权重,另一种是tfidf。tfidf是从全球思维的角度量化单词权重的一种方式。其中,tf即词频=单词出现在文档中的次数/文档的总数。你可以认为这里有多少文本记录,比如有多少text。这里量化的是单个文档中单词的权重。idf是反向文档的频率=log(文档总数/(包含该词的文档数) 1),idf从整体角度加权分布特征独特的单词,变相减权通用性强的单词。两者结合后,一方面考虑单个记录中单个单词特征的权重,另一方面也考虑单词的整体权重,最终获得tfidf的综合权重。更具体的可以从其他渠道理解,简而言之,这并不是很困难。##由于特征包含了文本属性、文本特征和更高的信息区分,因此优先考虑fromsklearn.feature_extraction.textimportCountVectorizerfromsklearn.feature_extraction.textimportTfidfVectorizerfromsklearn.naive_bayesimportMultinomialNBc_vec_s=CountVectorizer(analyzer='word',stop_words='english')df_text=pd.concat([df['description_norm'],df['name_norm'],df['text_norm']],axis=1)# 类型转换x_text_count=c_vec_s.fit_transform((df['text'] df['description']).tolist())x_train,x_test,y_train,y_test=train_test_split(x_text_count,y,test_size=0.35#贝叶斯nb=MultinomialNB()nb.fit(x_train, y_train)y_predict=nb.predict(x_test)text_confusion=confusion_matrix(y_test,y_predict,labels=[0,1,2])print(f'confusion_matrix: \n{text_confusion}')print_score(y_test,y_predict,text_confusion)这里使用了简单贝叶斯的分类模型,并使用了多项分布NB,我们将借此机会补充一些理论知识。简单贝叶斯分类的核心是通过现有样本的特征构建先验概率,然后通过先验概率计算未知分类的概率。结合这个例子,可以计算已知单词特征和结果之间的可能概率,类似于先验概率。在预测阶段,可以计算测试数据或实际数据的单词的权利特征。通过结合培训计算获得先验概率,可以计算或预测每个类别的概率,从而达到预测的目的。其中,P(A |B)是指事件B发生时事件A发生的概率(条件概率)。在传统的简单贝叶斯分类中,先验概率的计算与特征的分布有关,分为三种分布:高斯分布,即正态分布。此时,计算先验概率将认为特征是根据正态分布的,例如,常见的身高分布是正态分布。在这个例子中,词分布显然很难形成标准正态。当然,你也可以画出分布图。多项分布-有点难解释,或者结合文本分类,对于特征矩阵有N维,N维分布是离散的,所以对于每个类别有N个抽样概率计算,当然,每个维度的单词特征仍然是权力,最终得到一个整体概率。一个更流行的描述是,许多分布有点像扔N硬币的总概率(当然,有时你没有硬币——没有这个词,所以这次不需要扔,自然这个词的相应概率不需要计算),但实际上可能不是每个扔硬币的重心是绝对中间的,所以最终结果自然不是0.5。伯努利分布-结合这个例子,对于一个样本,其特征是整体特征,即不同于多项分布,虽然最终可能是N维字矩阵,但实际上每个样本参与概率计算字特征远低于N,正如上面所说,有时你不能得到硬币,自然不需要扔。然而,与伯努利不同,他相当于从全局的角度观察样本的概率,这对于没有出现的单词特征也是有意义的,即“未出现”也是一种特征表征,也需要参与概率计算,最终是一个真正的ND概率。所以对于文本分类,经常使用简单的贝叶斯分类很容易理解,先验概率计算逻辑使稀疏和分散的场景最大化每个细微特征的概率影响,使机制非常稳定,稳定到简单的贝叶斯很难做模型水平的优化,本身没有几个参数,所以从模型水平尝试优化,count特征化和tfidf特征化是上述两种思路。这是MultinomialNB中使用count特征化的结果:confusion_matrix:[[1593 507 236][8631052 283][305 3481406]]0-precision:0.57696486780152120-recall:0.68193493150684941-precision:0.5516518091242791-recall:0.47861692447679712-precision:0.73038961038961042-recall:0.6828557552209811avg-precison:0.6196687624384702avg-recall:0.614920373477:0.61439571060215这是MultinomialNBTfidf特征化的结果:confusion_matrix:[[1875 352 130][1072 922 242][460 2761264]]0-precision:0.55033754035808620-recall:0.79550275774289351-precision:0.59483870967741941-recall:0.412343470483005352-precision:0.77261613691931542-recall:0.632avg-precison:0.6392641289849403avg-recall:61320760752996accuracy:0.61596306239以下使用伯努利分布(BernoulliNB)简单的贝叶斯,并采用tfidf特征结果:confusion_matrix:[[2001 253 123][1148 779 196][526 2361331]]0-precision:0.54448979591836730-recall:0.8418174169120741-precision:0.61435331230283911-recall:0.366933584550164842-precision:0.80666666666666662-recall:0.6359292881032012avg-precison:0.6551699249626243avg-recall:0.61493429556:accuracy最好的结果是0.623,0.623,0.623,183072956,真的不好,但是和之前最大的不超过0.55比,简直好多了,感动得哭了。然而,仍然非常痛苦的是,1-male类别仍然是最糟糕的类别,这真的有可能是male的特征没有相对的显著性。这里再次解释,文本类的特征信息量仍然相对较大。虽然特征维度相对较高(),看起来非常复杂,但正因为如此,一些东西越能反映在侧面。对于文本特征,样本数量越多,分类就越容易更准确:x_train.shape(12243,66195)#前面是行数,即样本数,后面是列数,也就是说,在最后一篇文章中,我们首先使用经验来判断最终特征维度03更合理的特征选择 通过肉眼观察相关分布来选择数值型特征,实际上还有更合理的判断方法。第一种,判断特征变化与Y的相关系数(Pearsonr相关系数):from scipy.stats import pearsonrprint(f"tweet_count-y(pearsonr):{pearsonr(df_x['tweet_count'],y)}")print(f"retweet_c
以上就是关于模型上线该如何评估以及选择最终的预测结果?的相关介绍,更多模型上线该如何评估以及选择最终的预测结果?相关内容可以咨询我们或者浏览页面上的推荐内容。我们将让你对模型上线该如何评估以及选择最终的预测结果?有更深的了解和认识。
推荐阅读
最新文章
猜你喜欢以下内容:
一 客户顾问-张三 一