逻辑回归算法实验

一、逻辑回归介绍

  • 逻辑回归是一种分类模型
  • z=WTX=w0+w1x1+w2x2+......+wnxnz =W^{T}X=w^{0}+w^{1}x^{1}+w^{2}x^{2}+......+w^{n}x^{n}z=WTX=w0+w1x1+w2x2+......+wnxn
  • 逻辑回归通过sigmoid函数将输入值映射到 [0,1] 的区间范围。
  • y=p=sigmoid(z)=11+e−zy=p=sigmoid(z)=\frac{1}{1+e^{-z}}y=p=sigmoid(z)=1+e−z1​
  • 逻辑回归的目标函数:
    J(w)=−∑1ny(i)log(s(z(i)))+(1−y(i))log(1−s(z(i)))J(w)=-\sum^{n}_{1}y^{(i)}log(s(z^{(i)}))+(1-y^{(i)})log(1-s(z^{(i)})) J(w)=−1∑n​y(i)log(s(z(i)))+(1−y(i))log(1−s(z(i)))
    因此,当目标函数最小时,w的值,就是我们要求的最终权重值。

二、算法实现

1、鸢尾花的数据集

  • 通过sklearn的包导入鸢尾花的数据集:

    import numpy as np
    import pandas as pd
    from sklearn.datasets import load_iris
    
  • 用pd.DataFrage函数对数据集的显示进行整理:
    iris = load_iris()
    data = pd.DataFrame(iris.data, columns=iris.feature_names)  # 通过 pd.DataFrame 函数对数据集进行更清晰的展示
    data['Kind'] = iris['target']  # 插入列表 (kind表示花的种类)
    data = data[data["Kind"] != 2]  # 该实验只用到前两类的鸢尾花,故删除第三类。
    
  • 增加增加表格的列数行数和每行的宽度以此让数据集完整表示
    pd.set_option('display.max_rows', 1000)  # 行数
    pd.set_option('display.max_columns', 1000)  # 列数
    pd.set_option('display.width', 1000)  # 宽度
    
  • 数据集展示:
    print(data)
    

2、具体的函数实现

class LogisticRegression:"""使用python语言来实现逻辑回归算法。"""def __init__(self, alpha, times):""""初始化方法。:parameteralpha : float学习率。(用来在梯度下降的时候我们每次更新的步伐)times : int迭代次数。"""self.alpha = alphaself.times = times
    def sigmoid(self, z):""""sigmoid函数的实现:parameter-----z: float自变量,值为z = w^T * x:returns-----p : float,值为[0,1]之间。返回样本属于类别1的概率值,用来作为结果的预测。当 s>=0.5(z>=0)时,判定为类别1,否则判定为类别0。"""return 1.0/(1.0 + np.exp(-z))
    def fit(self, X, y):"""根据提供的训练数据X,对模型进行训练。:parameterX:类数组类型。形状:[样本数量,特征数量]待训练的样本特征属性。y:类数组类型,形状:[样本数量]每个样本的目标值。(标签)"""X = np.asarray(X)y = np.asarray(y)# 创建权重的向量,初始值为0,长度比特征数多1。(多出来的一个是截距)self.w_ = np.zeros(1 + X.shape[1])# 创建损失列表,用来保存每次迭代后的损失值。self.loss_ = []for i in range(self.times):z = np.dot(X, self.w_[1:]) + self.w_[0]# 计算概率值(结果判定为1的概率)p = self.sigmoid(z)# 根据逻辑回归的代价函数(目标函数),计算损失值。# 逻辑回归的代价函数(目标函数):cost = -np.sum(y * np.log(p) + (1-y) * np.log(1 - p))self.loss_.append(cost)# 调整权重值,根据公式:调整为:权重(j列) = 权重(j列)+ 学习率*sum((y-s(z))* x(j))self.w_[0] += self.alpha * np.sum(y-p)self.w_[1:] += self.alpha * np.dot(X.T, y-p)
    def predict_proba(self, X):"""根据参数传递的样本,对样本数据进行预测。:parameter-----X: 类数组类型。形状为[样本数量,特征数量]待预测的样本特征(属性):returns---result:数组类型预测的结果(概率值)"""X = np.asarray(X)z = np.dot(X, self.w_[1:]) + self.w_[0]p = self.sigmoid(z)# 将预测结果变成二维数组(结构)。便于后续拼接。p = p.reshape(-1, 1)# 将两个数组进行拼接。方向为横向拼接return np.concatenate([1-p, p], axis=1)
    def predict(self, X):"""根据参数传递的样本,对样本数据进行预测。:parameter-----X : 类数组类型。[样本数量,特征数量]待测试的样本特征(属性):returns-----result :数组类型。预测的结果(分类值)"""return np.argmax(self.predict_proba(X), axis=1)
  • 对训练集和测试集进行划分:
t1 = data[data["Kind"]==0]
t2 = data[data["Kind"]==1]
t1 = t1.sample(len(t1), random_state=0)
t2 = t2.sample(len(t2), random_state=0)train_X = pd.concat([t1.iloc[:40, :-1], t2.iloc[:40, :-1]], axis=0)
train_y = pd.concat([t1.iloc[:40, -1], t2.iloc[:40, -1]], axis=0)
test_X = pd.concat([t1.iloc[40:, :-1], t2.iloc[40:, :-1]], axis=0)
test_y = pd.concat([t1.iloc[40:, -1], t2.iloc[40:, -1]], axis=0)
  • 开始预测:
# 鸢尾花的特征列都在同一个数量级,我们这里不用进行标准化处理
lr = LogisticRegression(alpha=0.01, times=20)
lr.fit(train_X, train_y)
probability = lr.predict_proba(test_X)  # 预测的概率值
result = lr.predict(test_X)   # 预测的结果
accuracy = np.sum(result==test_y) / len(test_y)  # 预测结果的准确性
  • 打印预测结果:
print(probability)
print(result)
print(accuracy)

3、可视化

  • 调用画图库:
import matplotlib as mpl
import matplotlib.pyplot as plt
mpl.rcParams["font.family"] = "SimHei"  # 字体为黑体
mpl.rcParams["axes.unicode_minus"] = False  # 解决保存图像是负号'-'显示为方块的问问题
  • 绘制图:
# 绘制预测值
plt.plot(result, "ro", ms=15, label="预测值")
#绘制真实值
plt.plot(test_y.values, "go", label="真实值")
plt.title("逻辑回归")
plt.xlabel("样本序号")
plt.ylabel("类别")
plt.legend()
plt.show()

  • 绘制目标函数的损失值图像:
# 绘制目标函数的损失值图像
plt.plot(range(1, lr.times+1), lr.loss_, "go-")
plt.show()

机器学习基础算法四:逻辑回归算法实验相关推荐

  1. 机器学习算法 03 —— 逻辑回归算法(精确率和召回率、ROC曲线和AUC指标、过采样和欠采样)

    文章目录 系列文章 逻辑回归 1 逻辑回归介绍 1.1 逻辑回归原理 输入 激活函数 1.2 损失以及优化 2 逻辑回归API介绍 3 案例:肿瘤良性恶性预测 4 分类模型的评估 4.1 分类评估方法 ...

  2. 朴素贝叶斯算法和逻辑回归算法的区别?

    朴素贝叶斯算法和逻辑回归算法的区别? 1.两种算法的模型不同: Naive Bayes是一个生成模型,在计算P(y|x)之前,先要从训练数据中计算P(x|y)和P(y)的概率,从而利用贝叶斯公式计算P ...

  3. 【机器学习入门】(9) 逻辑回归算法:原理、精确率、召回率、实例应用(癌症病例预测)附python完整代码和数据集

    各位同学好,今天我和大家分享一下python机器学习中的逻辑回归算法.内容主要有: (1) 算法原理:(2) 精确率和召回率:(3) 实例应用--癌症病例预测. 文末有数据集和python完整代码 1 ...

  4. 机器学习基础专题:逻辑回归

    逻辑回归 广义线性模型. 原理 输入 训练集数据T=(x1,y1)...(xM,yM)T = {(x_1,y_1) ... (x_M,y_M)}T=(x1​,y1​)...(xM​,yM​),xi∈X ...

  5. 逻辑回归算法python_逻辑回归算法原理和例子

    本课程讲解现在工业界和学术界流行的机器学习算法的相关知识,以及如何用python去实现这些算法.算法的讲解包括supervised learning(有监督式学习)和unsupervised lear ...

  6. 基于机器学习逻辑回归算法完成癌症病人的肿瘤是否良性的判断

    https://www.toutiao.com/a6630407688360575502/ 2018-12-04 22:46:48 逻辑回归算法 虽然逻辑回归算法的名字中有回归二字,但是它却不是回归算 ...

  7. java基础巩固-宇宙第一AiYWM:为了维持生计,编程语言番外篇之机器学习(项目预测模块总结:线性回归算法、逻辑回归分类算法)~整起

    机器学习 一.机器学习常见算法(未完待续...) 1.算法一:线性回归算法:找一条完美的直线,完美拟合所有的点,使得直线与点的误差最小 2.算法二:逻辑回归分类算法 3.算法三:贝叶斯分类算法 4.算 ...

  8. spark 逻辑回归算法案例_黄美灵的Spark ML机器学习实战

    原标题:黄美灵的Spark ML机器学习实战 本课程主要讲解基于Spark 2.x的ML,ML是相比MLlib更高级的机器学习库,相比MLlib更加高效.快捷:ML实现了常用的机器学习,如:聚类.分类 ...

  9. 机器学习笔记(七)——逻辑回归算法

    逻辑回归(Logistic Regression,LR).在Kaggle竞赛的统计中,LR算法以63.5%的出产率,荣获各领域中"出场率最高的算法"这一殊荣.在实际场景中,逻辑回归 ...

最新文章

  1. 视频动作识别--Convolutional Two-Stream Network Fusion for Video Action Recognition
  2. 苹果为了不让AirTag被用来跟踪,将推出一个安卓应用
  3. windows哪些版本可以免费升级win10
  4. 输出等边三角形php,php打印三角星星方法实列
  5. HDU1071_数学几何
  6. 斗鱼赴美递交IPO招股书:拟登陆纽交所 融资5亿美金
  7. Hbase数据结构+hbase shell基本语法
  8. Java编程的11个特点
  9. 解除网页复制限制的Chrome插件-SuperCopy
  10. python处理word页码_word——插入页码
  11. c51单片机流水灯程序汇编语言,基于51单片机的流水灯程序
  12. 华为网络设备查看风扇状态命令
  13. C语言pow函数的调用
  14. 给基于HEXO的博客添加gitter在线交流
  15. python获取地图上经纬度_Python获取各大地图平台经纬度数据,哪家的数据最准确?...
  16. 计算机图形学实验一 《MFC绘图基础》
  17. [机缘参悟-43]:鬼谷子-第六忤合篇 - 合则聚,不合则散,顺势而为
  18. CentOS 8.2云服务器定时运行脚本
  19. 关于小程序开发的一些资源
  20. 07|Serverless运行时:使用自定义运行时支持自定义编程语言

热门文章

  1. 如何修改linux文件生成日期,我如何更改文件的修改/创建日期?
  2. GD32450i-EVAL学习笔记 18 - USB FS
  3. 如何在UE5中重建哥特式建筑场景?
  4. Cocos Creator Android 平台 Facebook 原生登录
  5. Spring——IOC底层原理
  6. 教你使用 Python 获取美国重要经济指标数据
  7. 【Codeforces 785D】范德蒙恒等式
  8. 关于浏览器插件的使用
  9. 电脑屏幕扩展后电脑没有声音
  10. SpringBoot如何打包项目?