机器学习--逻辑回归的原理与基础实现


概述

逻辑回归(Logistic Regression,简称LR),其实是一个很有误导性的概念,虽然它的名字中带有“回归”两个字,但是它最擅长处理的却是分类问题
LR分类器适用于各项广义上的分类任务,例如:评论信息的正负情感分析(二分类)、用户点击率(二分类)、用户违约信息预测(二分类)、垃圾邮件检测(二分类)、疾病预测(二分类)、用户等级分类(多分类)等场景。我们这里主要讨论的是二分类问题
在这里插入图片描述


一、逻辑回归

逻辑回归线性回归本质上都是得到一条直线,不同的是,线性回归的直线是尽可能去拟合输入变量X的分布,使得训练集中所有样本点到直线的距离最短;而逻辑回归的直线是尽可能去拟合决策边界,使得训练集样本中的样本点尽可能分离开。因此,两者的目的是不同的。

  • Sigmoid函数
    在这里插入图片描述
  • 通过代码理解Sigmoid函数
import numpy as np
import math
import matplotlib.pyplot as plt
%matplotlib inline
X = np.linspace(-5,5,200)
y = [1/(1+math.e**(-x)) for x in X]

plt.plot(X,y)
plt.show()

在这里插入图片描述

X = np.linspace(-60,60,200)
y = [1/(1+math.e**(-x)) for x in X]

plt.plot(X,y)
plt.show()

在这里插入图片描述

  • 损失函数

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

  • 逻辑回归与线性回归
    逻辑回归和线性回归是两类模型,逻辑回归是分类模型线性回归是回归模型
    最大似然估计

二、小案例

所用的数据集:./data/info.txt【我设置的0积分免费下载,若不是,请告知我!感谢!】

# 导入相关包
import numpy as np
# 从sklearn导入LogisticRegression方法
from sklearn.linear_model import LogisticRegression
# 导入划分训练集和测试集的方法
from sklearn.model_selection import train_test_split
import os
# 读取文件
if not os.path.exists('./data/info.txt'):
    print('文件不存在!')
else:
    data = np.loadtxt('./data/info.txt',delimiter=",")# delimiter读取文件的分隔符
    print(data)

[[2.697e+03 6.254e+03 1.000e+00]
[1.872e+03 2.014e+03 0.000e+00]
[2.312e+03 8.120e+02 0.000e+00]
[1.983e+03 4.990e+03 1.000e+00]
[9.320e+02 3.920e+03 0.000e+00]
[1.321e+03 5.583e+03 1.000e+00]
[2.215e+03 1.560e+03 0.000e+00]
[1.659e+03 2.932e+03 0.000e+00]
[8.650e+02 7.316e+03 1.000e+00]
[1.685e+03 4.763e+03 0.000e+00]
[1.786e+03 2.523e+03 1.000e+00]]

# 划分训练集与测试集
train_x, test_x, train_y, test_y = train_test_split(data[:, 0:2], data[:, 2], test_size=0.3)
# data[:, 0:2]  前两列          特征值
# data[:, 2]    最后一列       标签值
# test_size=0.3 测试数据所占比列
train_x

array([[1659., 2932.],
[2215., 1560.],
[2312., 812.],
[ 865., 7316.],
[ 932., 3920.],
[2697., 6254.],
[1786., 2523.]])

test_x

array([[1983., 4990.],
[1872., 2014.],
[1321., 5583.],
[1685., 4763.]])

train_y

array([0., 0., 0., 1., 0., 1., 1.])

test_y

array([1., 0., 1., 0.])

# 调用sklearn里面的方法 
model = LogisticRegression()
# 通过训练集得到训练后的模型
model.fit(train_x, train_y)
# 利用测试数据集测试模型,并输出结果
# 测试模型
pred_y = model.predict(test_x)
# 输出判断预测是否与真实值相等
print(pred_y == test_y)
print(model.score(test_x, test_y))

[ True True True False]
0.75

pred_y

array([1., 0., 1., 1.])

test_y

array([1., 0., 1., 0.])

model.score(test_x, test_y)的作用就是将数据pred_y和test_y进行对比


总结

  • numpy的loadtxt()方法
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/HG0724/article/details/121523433