逻辑回归文本分类

什么是逻辑回归

    logistic回归是一种广义线性回归(generalized linear model),因此与多重线性回归分析有很多相同之处。它们的模型形式基本上相同,都具有 w‘x+b,其中w和b是待求参数,其区别在于他们的因变量不同,多重线性回归直接将w‘x+b作为因变量,即y =w‘x+b,而logistic回归则通过函数L将w‘x+b对应一个隐状态p,p =L(w‘x+b),然后根据p 与1-p的大小决定因变量的值。如果L是logistic函数,就是logistic回归,如果L是多项式函数就是多项式回归。 

logistic回归的因变量可以是二分类的,也可以是多分类的,但是二分类的更为常用,也更加容易解释,多类可以使用softmax方法进行处理。实际中最为常用的就是二分类的logistic回归。
Logistic回归模型的适用条件:
1 因变量为二分类的分类变量或某事件的发生率,并且是数值型变量。但是需要注意,重复计数现象指标不适用于Logistic回归。
2 残差和因变量都要服从二项分布。二项分布对应的是分类变量,所以不是正态分布,进而不是用最小二乘法,而是最大似然法来解决方程估计和检验问题。
3 自变量和Logistic概率是线性关系
4 各观测对象间相互独立。
(以上复制于百度百科,在我的印象当中逻辑回归其实是一个相对简单但是又不那么简单的算法)
一下为自己的见解:
逻辑回归可以是解决多分类,也可以是解决二分类问题。当然也不仅仅是解决二维的问题。逻辑回归就是在输入一定样本后,通过调参画出一条线将养分区分成若干类。在这个过程中没有办法认为那一系列参数是最佳的,如何辨别那就只有通过测试集了,当然了测试集与训练集的选定对于结果影响也是十分大的。在这个基础上我们有可以扩展那就是在二维是一条直线,在三维不就是一个面了吗?这算不算逻辑回归呢?若在二维中最后的域并不是规则的或者说不是两块等等。这算不算逻辑回归?当然是逻辑回归。

在这里插入图片描述
在这里插入图片描述
(原谅我盗图 取自该篇https://blog.csdn.net/pakko/article/details/37878837)

逻辑回归能干什么

逻辑回归能干什么?这个问题或许在看完上述之后已经有了了解但是请注意!
Logistic回归模型的适用条件:
1 因变量为二分类的分类变量或某事件的发生率,并且是数值型变量。但是需要注意,重复计数现象指标不适用于Logistic回归。
2 残差和因变量都要服从二项分布。二项分布对应的是分类变量,所以不是正态分布,进而不是用最小二乘法,而是最大似然法来解决方程估计和检验问题。
3 自变量和Logistic概率是线性关系
4 各观测对象间相互独立。

简易代码实现

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import  LinearRegression
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split

X,y = make_regression(n_samples=100,n_features=2,n_informative=2,random_state=38)
X_train,X_test,y_train,y_test = train_test_split(X,y,random_state=8)
lr = LinearRegression().fit(X_train,y_train)

print('lr.coef_:{}'.format(lr.coef_[:]))
print('lr.intercept_:{}'.format(lr.intercept_))

# X,y = make_regression(n_samples=50,n_features=1,n_informative=1,noise=50,random_state=1)
#
# reg = LinearRegression()
# reg.fit(X,y)
# z = np.linspace(-3,3,200).reshape(-1,1)
# plt.scatter(X,y,c='b',s=60)
# plt.plot(z,reg.predict(z),c='k')


# X = [[1],[4],[3]]
# y = [3,5,3]
# lr = LinearRegression().fit(X,y)#线性模型拟合这两个点
# z = np.linspace(0,5,20)#画出两个点以及函数
# plt.scatter(X,y,s=80)
# plt.plot(z,lr.predict(z.reshape(-1,1)),c='k')
# plt.title('Straight Line')
# plt.show()
#print('y = {:,.3f}'.format(lr.coef_[0]),'x','+{:,.3f}'.format(lr.intercept_))
#拟合数据时,求线性方程的系数
# print('直线的系数为:{:,.2f}'.format(reg.coef_[1]))
# print('直线的截距是:{:,.2f}'.format(reg.intercept_))
print('训练集得分:{:,.2f}'.format(lr.score(X_test,y_test)))

在这里插入图片描述
在这里插入图片描述

通过运行上面的代码可以发现,训练集和测试集的得分均为1.00,当然这说明了模型的高度拟合,但是这也是因为没有在我们的数据中加入影响因素noise导致的,在实际的数据集中会有各种因素的影响,

那就加入noise再进行测试吧。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import  LinearRegression
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
from sklearn.datasets import  load_diabetes
X,y = load_diabetes().data,load_diabetes().target
X_train,X_test,y_train,y_test = train_test_split(X,y,random_state=8)
lr = LinearRegression().fit(X_train,y_train)
print('训练集得分:{:,.2f}'.format(lr.score(X_train,y_train)))
print('测试集得分:{:,.2f}'.format(lr.score(X_test,y_test)))

在对上述代码进行运行后,可以发现训练集和测试集间的得分间存在一定的差异,这是因为模型过拟合导致的。在实际应用的过程中会采用伊西俄方法来避免过拟合。
存在三种情况:(1)欠拟合,(2)拟合(也是我们所追求的)(3)过拟合(这种情况比欠拟合更加麻烦)
以上就是一个建议的线性模型实现。

其他方法

Part2 基于鸢尾花(iris)数据集的逻辑回归分类实践

Step1:库函数导入
Step2:数据读取/载入
Step3:数据信息简单查看
Step4:可视化描述
Step5:利用 逻辑回归模型 在二分类上 进行训练和预测
Step6:利用 逻辑回归模型 在三分类(多分类)上 进行训练和预测

函数库导入

##  基础函数库
import numpy as np 
import pandas as pd

## 绘图函数库
import matplotlib.pyplot as plt
import seaborn as sns

数据库读取

##我们利用sklearn中自带的iris数据作为数据载入,并利用Pandas转化为DataFrame格式
from sklearn.datasets import load_iris
data = load_iris() #得到数据特征
iris_target = data.target #得到数据对应的标签
iris_features = pd.DataFrame(data=data.data, columns=data.feature_names) #利用Pandas转化为DataFrame格式

数据信息简单查看

##利用.info()查看数据的整体信息
iris_features.info()

##<class'pandas.core.frame.DataFrame'>
##RangeIndex:150entries,0to149
##Datacolumns(total4columns):
###ColumnNon-NullCountDtype
##----------------------------
##0sepallength(cm)150non-nullfloat64
##1sepalwidth(cm)150non-nullfloat64
##2petallength(cm)150non-nullfloat64
##3petalwidth(cm)150non-nullfloat64
##dtypes:float64(4)
##memoryusage:4.8KB

##进行简单的数据查看,我们可以利用.head()头部.tail()尾部
iris_features.head()

可视化描述

## 合并标签和特征信息
iris_all = iris_features.copy() ##进行浅拷贝,防止对于原始数据的修改
iris_all['target'] = iris_target
## 特征与标签组合的散点可视化
sns.pairplot(data=iris_all,diag_kind='hist', hue= 'target')
plt.show()

在这里插入图片描述

# 选取其前三个特征绘制三维散点图
from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure(figsize=(10,8))
ax = fig.add_subplot(111, projection='3d')

iris_all_class0 = iris_all[iris_all['target']==0].values
iris_all_class1 = iris_all[iris_all['target']==1].values
iris_all_class2 = iris_all[iris_all['target']==2].values
# 'setosa'(0), 'versicolor'(1), 'virginica'(2)
ax.scatter(iris_all_class0[:,0], iris_all_class0[:,1], iris_all_class0[:,2],label='setosa')
ax.scatter(iris_all_class1[:,0], iris_all_class1[:,1], iris_all_class1[:,2],label='versicolor')
ax.scatter(iris_all_class2[:,0], iris_all_class2[:,1], iris_all_class2[:,2],label='virginica')
plt.legend()

plt.show()

逻辑回归原理

当z≥0 时,y≥0.5,分类为1,当 z<0时,y<0.5,分类为0,其对应的y值我们可以视为类别1的概率预测值。Logistic回归虽然名字里带“回归”,但是它实际上是一种分类方法,主要用于两分类问题(即输出只有两种,分别代表两个类别),所以利用了Logistic函数(或称为Sigmoid函数),函数形式为:

在这里插入图片描述
对应的函数图像可以表示如下:

import numpy as np
import matplotlib.pyplot as plt
x = np.arange(-5,5,0.01)
y = 1/(1+np.exp(-x))

plt.plot(x,y)
plt.xlabel('z')
plt.ylabel('y')
plt.grid()
plt.show()

在这里插入图片描述

通过上图我们可以发现 Logistic 函数是单调递增函数,并且在z=0而回归的基本方程,将回归方程写入其中为:

在这里插入图片描述

逻辑回归从其原理上来说,逻辑回归其实是实现了一个决策边界:对于函数,当z≥0 时,y≥0.5,分类为1,当 z<0时,y<0.5,分类为0,其对应的y值我们可以视为类别1的概率预测值。
对于模型的训练而言:实质上来说就是利用数据求解出对应的模型的特定的ω。从而得到一个针对于当前数据的特征逻辑回归模型。
而对于多分类而言,将多个二分类的逻辑回归组合,即可实现多分类。

推荐

在学习的过程中实际有很多的资源包括B站与博客,个人觉得很不错的有吴恩达教授机器学习课,还有浙大胡浩基教授的课程

https://zhuanlan.zhihu.com/p/74874291
https://blog.csdn.net/pakko/article/details/37878837

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
sklearn是一个Python机器学习库,其中包含了许多用于文本分类的算法,其中之一就是逻辑回归逻辑回归是一种常用的二分类算法,在文本分类中也有广泛应用。它的目标是根据输入的特征向量预测出一个概率值,表示该样本属于某个类别的概率。 在sklearn中,我们可以使用LogisticRegression类来实现逻辑回归文本分类。首先,我们需要将文本数据进行预处理,将其转化为数值特征向量。一种常用的方法是使用词袋模型,将文本转化为词频矩阵。 然后,我们可以使用TfidfVectorizer类对文本进行特征提取和向量化,将文本转化为TF-IDF特征向量。TF-IDF是一种常用的文本特征表示方法,它考虑了词频和逆文档频率,可以有效地表示文本的重要程度。 接下来,我们可以将特征向量作为输入,将对应的标签作为输出,使用LogisticRegression类进行训练。在训练过程中,逻辑回归模型会学习到一组参数,用于确定样本属于某个类别的概率。 在训练完成后,我们可以使用训练好的模型对新的文本样本进行分类预测。调用predict方法,将新的特征向量输入模型,即可得到预测结果。 逻辑回归文本分类是sklearn中非常常用和实用的功能之一,它可以快速准确地对文本进行分类。同时,sklearn提供了许多其他强大的特征提取和模型调优工具,可以帮助我们更好地完成文本分类任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值