机器学习基础算法四:逻辑回归算法实验
逻辑回归算法实验
一、逻辑回归介绍
- 逻辑回归是一种分类模型
- 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∑ny(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()
机器学习基础算法四:逻辑回归算法实验相关推荐
- 机器学习算法 03 —— 逻辑回归算法(精确率和召回率、ROC曲线和AUC指标、过采样和欠采样)
文章目录 系列文章 逻辑回归 1 逻辑回归介绍 1.1 逻辑回归原理 输入 激活函数 1.2 损失以及优化 2 逻辑回归API介绍 3 案例:肿瘤良性恶性预测 4 分类模型的评估 4.1 分类评估方法 ...
- 朴素贝叶斯算法和逻辑回归算法的区别?
朴素贝叶斯算法和逻辑回归算法的区别? 1.两种算法的模型不同: Naive Bayes是一个生成模型,在计算P(y|x)之前,先要从训练数据中计算P(x|y)和P(y)的概率,从而利用贝叶斯公式计算P ...
- 【机器学习入门】(9) 逻辑回归算法:原理、精确率、召回率、实例应用(癌症病例预测)附python完整代码和数据集
各位同学好,今天我和大家分享一下python机器学习中的逻辑回归算法.内容主要有: (1) 算法原理:(2) 精确率和召回率:(3) 实例应用--癌症病例预测. 文末有数据集和python完整代码 1 ...
- 机器学习基础专题:逻辑回归
逻辑回归 广义线性模型. 原理 输入 训练集数据T=(x1,y1)...(xM,yM)T = {(x_1,y_1) ... (x_M,y_M)}T=(x1,y1)...(xM,yM),xi∈X ...
- 逻辑回归算法python_逻辑回归算法原理和例子
本课程讲解现在工业界和学术界流行的机器学习算法的相关知识,以及如何用python去实现这些算法.算法的讲解包括supervised learning(有监督式学习)和unsupervised lear ...
- 基于机器学习逻辑回归算法完成癌症病人的肿瘤是否良性的判断
https://www.toutiao.com/a6630407688360575502/ 2018-12-04 22:46:48 逻辑回归算法 虽然逻辑回归算法的名字中有回归二字,但是它却不是回归算 ...
- java基础巩固-宇宙第一AiYWM:为了维持生计,编程语言番外篇之机器学习(项目预测模块总结:线性回归算法、逻辑回归分类算法)~整起
机器学习 一.机器学习常见算法(未完待续...) 1.算法一:线性回归算法:找一条完美的直线,完美拟合所有的点,使得直线与点的误差最小 2.算法二:逻辑回归分类算法 3.算法三:贝叶斯分类算法 4.算 ...
- spark 逻辑回归算法案例_黄美灵的Spark ML机器学习实战
原标题:黄美灵的Spark ML机器学习实战 本课程主要讲解基于Spark 2.x的ML,ML是相比MLlib更高级的机器学习库,相比MLlib更加高效.快捷:ML实现了常用的机器学习,如:聚类.分类 ...
- 机器学习笔记(七)——逻辑回归算法
逻辑回归(Logistic Regression,LR).在Kaggle竞赛的统计中,LR算法以63.5%的出产率,荣获各领域中"出场率最高的算法"这一殊荣.在实际场景中,逻辑回归 ...
最新文章
- 视频动作识别--Convolutional Two-Stream Network Fusion for Video Action Recognition
- 苹果为了不让AirTag被用来跟踪,将推出一个安卓应用
- windows哪些版本可以免费升级win10
- 输出等边三角形php,php打印三角星星方法实列
- HDU1071_数学几何
- 斗鱼赴美递交IPO招股书:拟登陆纽交所 融资5亿美金
- Hbase数据结构+hbase shell基本语法
- Java编程的11个特点
- 解除网页复制限制的Chrome插件-SuperCopy
- python处理word页码_word——插入页码
- c51单片机流水灯程序汇编语言,基于51单片机的流水灯程序
- 华为网络设备查看风扇状态命令
- C语言pow函数的调用
- 给基于HEXO的博客添加gitter在线交流
- python获取地图上经纬度_Python获取各大地图平台经纬度数据,哪家的数据最准确?...
- 计算机图形学实验一 《MFC绘图基础》
- [机缘参悟-43]:鬼谷子-第六忤合篇 - 合则聚,不合则散,顺势而为
- CentOS 8.2云服务器定时运行脚本
- 关于小程序开发的一些资源
- 07|Serverless运行时:使用自定义运行时支持自定义编程语言