1.
逻辑回归
任何的模型都是有自己的假设,在这个假设下模型才是适用的。逻辑回归的第一个基本假设是假设数据服从伯努利分布。伯努利分布有一个简单的例子是抛硬币,抛中为正面的概率是p,抛中为负面的概率是1−p.在逻辑回归这个模型里面是假设 hθ(x) 为样本为正的概率,1−hθ(x)为样本为负的概率。那么整个模型可以描述为
hθ(x;θ)=p
逻辑回归的第二个假设是假设样本为正的概率是
p=11+e−θTx
所以逻辑回归的最终形式
hθ(x;θ)=11+e−θTx
逻辑回归的损失函数
逻辑回归的损失函数是它的极大似然函数
Lθ(x)=∏i=1mhθ(xi;θ)yi∗(1−hθ(xi;θ))1−yi
4.正则化模型的评估指标
因为有的时候我们不知道减少什么特征比较好,以及我们也不希望减特征,特征越多,越能使得训练表现好嘛。正则化可以在不减少特征的情况上,保持一个好的表现。
L0 L1 L2正则化。
L1产生稀疏的特征,L2则充分利用更多的特征,特征的权重的均衡化
评价指标:
使用混淆矩阵
(1)精准率
精准率:预测结果为1的时候,预测正确的概率
(2)召回率
我们关注的事件真实的发生的情况下,成功预测的概率
2.SVM
Svm(support Vector Mac)又称为支持向量机,是一种二分类的模型。当然如果进行修改之后也是可以用于多类别问题的分类。支持向量机可以分为线性核非线性两大类。其主要思想为找到空间中的一个更够将所有数据样本划开的超平面,并且使得本本集中所有数据到这个超平面的距离最短。
一、基于最大间隔分隔数据
1.1支持向量与超平面
在了解svm算法之前,我们首先需要了解一下线性分类器这个概念。比如给定一系列的数据样本,每个样本都有对应的一个标签。为了使得描述更加直观,我们采用二维平面进行解释,高维空间原理也是一样。举个简单子:如下图所示是一个二维平面,平面上有两类不同的数据,分别用圆圈和方块表示。我们可以很简单地找到一条直线使得两类数据正好能够完全分开。但是能将据点完全划开直线不止一条,那么在如此众多的直线中我们应该选择哪一条呢?从直观感觉上看图中的几条直线,是不是要更好一些呢?是的我们就是希望寻找到这样的直线,使得距离这条直线最近的点到这条直线的距离最短。这读起来有些拗口,我们从图三中直观来解释这一句话就是要求的两条外面的线之间的间隔最大。这是可以理解的,因为假如数据样本是随机出现的,那么这样分割之后数据点落入到其类别一侧的概率越高那么最终预测的准确率也会越高。在高维空间中这样的直线称之为超平面,因为当维数大于三的时候我们已经无法想象出这个平面的具体样子。那些距离这个超平面最近的点就是所谓支持向量,实际上如果确定了支持向量也就确定了这个超平面,找到这些支持向量之后其他样本就不会起作用了。
code:
import pandas as np
from sklearn.feature_extraction.text import TfidfVectorizer
dataPath = 'H:/nlp/new_data/train_set_0.csv'
df_train = pd.read_csv(dataPath)
vectorizer = TfidfVectorizer(ngram_range=(1, 2), min_df=3, max_df=0.9, sublinear_tf=True)
vectorizer.fit(df_train['word_seg'])
x_train = vectorizer.transform(df_train['word_seg'])
x_train, x_test, y_train, y_test = train_test_split(x_train, df['class'], test_size=0.3)
clf = LogisticRegression(C=120, dual=True)
#clf = svm.LinearSVC(C=5, dual=False)
clf.fit(x_train, y_train)
y_prediction = clf.predict(x_test)
f1 = f1_score(y_test, y_prediction, average='micro')
print('The F1 Score: ' + str("%.2f" % f1))
LR:
SVM
参考:
http://www.360doc.com/content/18/0424/21/47919125_748467297.shtml