目录

概念了解

线性模型与回归

最小二乘与参数求解

对数线性回归

Logistic回归

梯度下降

代码实现

线性模型与回归

逻辑回归

借鉴


概念了解

线性模型与回归

线性模型一般形式

最小二乘与参数求解

目标函数也就是在机器学习中常说的损失函数,我们的目标是得到使目标函数最小化时候的拟合函数的模型

最小二乘法(least sqaure method) - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/38128785

对数线性回归

对数线性回归模型:= , 也就是让模型 去逼近 ,而不是y。也可以对 =做一下变换就变成了,也可以理解为让 去逼近y。形式上还是线性回归的,但实质上已是在求取输入空间到输出空间的非线性函数映射

Logistic回归

逻辑回归(Logistic Regression)又叫对数几率回归,是一种用于解决二分类(0 or 1)问题的机器学习方法(适合数值型的二值型输出的拟合),用于估计某种事物的可能性,比如根据患者的医疗数据判断它是否能被治愈,区别肿瘤是否为良性,恶性。

就如下图所示

同时单位阶跃函数会有不连续问题

logistic回归用于分类,假设得到的类别为0或者1,那么可以使用sigmoid函数处理输入

衡量的是输入数据   归属于类别 1 的概率,当 的时候, ,可以认为  归属于类别 0 的概率较大,当  的时候,,可以认为  归属于类别 1 的概率较大。如果我们将线性加权得到的

Sigmoid函数_百度百科 (baidu.com)https://baike.baidu.com/item/Sigmoid%E5%87%BD%E6%95%B0

import numpy as np
def sigmoid(z):return 1 / (1 + np.exp(-z))

(其中 选择0.5作为阈值是一个一般的做法,实际应用时特定的情况可以选择不同阈值,如果对正例的判别准确性要求高,可以选择阈值大一些,对正例的召回要求高,则可以选择阈值小一些。)

Logistic 回归的本质是:假设数据服从这个分布,然后使用极大似然估计做参数的估计

极大似然估计,通俗理解来说,就是利用已知的样本结果信息,反推最具有可能(最大概率)导致这些样本结果出现的模型参数值!

换句话说,极大似然估计提供了一种给定观察数据来评估模型参数的方法,即:“模型已定,参数未知”。

对极大似然法还不是很了解的话可以看看下面这篇文章

一文搞懂极大似然估计 - 知乎 (zhihu.com)

梯度下降

梯度下降(Gradient descent )是利用一阶的梯度信息找到函数局部最优解的一种方法,也是机器学习里面常用的一种优化方法。

由于梯度方向是某一个函数值域变化最快的方向,所以要找函数的最值,最好的办法就是沿该函数的梯度方向寻找。

要找到损失函数的最小值,只需要每一步都往下走,也就是每一步都可以让误差损失函数小一点,无限逼近最小值。

α是步长,y(i)是真实值,h(x)是预测值,j表示第j个回归系数,i表示第i个样本。

代码实现

线性模型与回归

import numpy as np
import pandas as pd
import matplotlib.pyplot as pltpath =  'ex1data1.txt'
data = pd.read_csv(path, header=None, names=['Population', 'Profit'])#创建一个以参数θ为特征函数的代价函数
def computeCost(X, y, theta):inner = np.power(((X * theta.T) - y), 2)return np.sum(inner) / (2 * len(X))
#以便我们可以使用向量化的解决方案来计算代价和梯度。
data.insert(0, 'Ones', 1)# set X (training data) and y (target variable)
cols = data.shape[1]
X = data.iloc[:,0:cols-1]#X是所有行,去掉最后一列
y = data.iloc[:,cols-1:cols]#X是所有行,最后一列
#代价函数是应该是numpy矩阵,所以我们需要转换X和Y,然后才能使用它们。 我们还需要初始化theta。
X = np.matrix(X.values)
y = np.matrix(y.values)
theta = np.matrix(np.array([0,0]))#梯度下降
def gradientDescent(X, y, theta, alpha, iters):temp = np.matrix(np.zeros(theta.shape))parameters = int(theta.ravel().shape[1])cost = np.zeros(iters)for i in range(iters):error = (X * theta.T) - yfor j in range(parameters):term = np.multiply(error, X[:,j])temp[0,j] = theta[0,j] - ((alpha / len(X)) * np.sum(term))theta = tempcost[i] = computeCost(X, y, theta)return theta, cost
#初始化一些附加变量 - 学习速率α和要执行的迭代次数。
alpha = 0.01
iters = 1000
g, cost = gradientDescent(X, y, theta, alpha, iters)
computeCost(X, y, g)
#绘制线性模型以及数据,直观地看出它的拟合
x = np.linspace(data.Population.min(), data.Population.max(), 100)
f = g[0, 0] + (g[0, 1] * x)fig, ax = plt.subplots(figsize=(12,8))
ax.plot(x, f, 'r', label='Prediction')
ax.scatter(data.Population, data.Profit, label='Traning Data')
ax.legend(loc=2)
ax.set_xlabel('Population')
ax.set_ylabel('Profit')
ax.set_title('Predicted Profit vs. Population Size')
plt.show()

逻辑回归

数据集:logistic data

根据城市人口数量,预测开小吃店的利润。第一列是城市人口数量,第二列是该城市小吃店利润

import numpy as np
import pandas as pd
import matplotlib.pyplot as pltpath='E:/Edge-Download/ex2data1.txt'
data=pd.read_csv(path,names=['Exam1','Exam2','Accepted'])
data.head()#数据可视化
fig,ax=plt.subplots()
ax.scatter(data[data['Accepted'] == 0]['Exam1'], data[data['Accepted'] == 0]['Exam2'], c='r', marker='x', label='y=0')
ax.scatter(data[data['Accepted'] == 1]['Exam1'], data[data['Accepted'] == 1]['Exam2'], c='b', marker='o', label='y=1')
ax.legend()
ax.set_xlabel('exam1')
ax.set_ylabel('exam2')
plt.show()def get_Xy(data):# 在第一列插入1data.insert(0, 'ones', 1)# 取除最后一列以外的列X_ = data.iloc[:, 0:-1]# 取特征值X = X_.values# 取最后一列y_ = data.iloc[:, -1]y = y_.values.reshape(len(y_), 1)return X, yX,y=get_Xy(data)
#损失函数
def sigmoid(z):return 1/(1+np.exp(-z))def costFunction(X,y,theta):A=sigmoid(X@theta)first=y * np.log(A)second =(1-y)*np.log(1-A)#样本的累加return -np.sum(first+second)/len(X)theta=np.zeros((3,1))
theta.shape#输出损失函数
cost_init=costFunction(X,y,theta)
print(cost_init)#梯度下降
def gradientDescent(X, y, theta, alpha, iters):m = len(X)costs = []for i in range(iters):A = sigmoid(X @ theta)# X.T:X的转置theta = theta - (alpha / m) * X.T @ (A - y)cost = costFunction(X, y, theta)costs.append(cost)if i % 1000 == 0:print(cost)return costs, theta
alpha=0.004
iters=200000
costs, theta_final = gradientDescent(X, y, theta, alpha, iters)
print(costs)def predict(X, theta):prob = sigmoid(X @ theta)return [1 if x >= 0.5 else 0 for x in prob]print(predict(X, theta_final))y_ = np.array(predict(X, theta_final))
print(y_)
y_pre = y_.reshape(len(y_), 1)
# 求取均值
acc = np.mean(y_pre == y)
print(acc)
print('-----------------------6.决策边界-------------------------------------')
# 决策边界就是Xθ=0的时候
coef1 = - theta_final[0, 0] / theta_final[2, 0]
coef2 = - theta_final[1, 0] / theta_final[2, 0]
x = np.linspace(20, 100, 100)
f = coef1 + coef2 * x
fig, ax = plt.subplots()
ax.scatter(data[data['Accepted'] == 0]['Exam1'], data[data['Accepted'] == 0]['Exam2'], c='r', marker='x', label='y=0')
ax.scatter(data[data['Accepted'] == 1]['Exam1'], data[data['Accepted'] == 1]['Exam2'], c='b', marker='o', label='y=1')
ax.legend()
ax.set_xlabel('exam1')
ax.set_ylabel('exam2')
ax.plot(x, f, c='g')
plt.show()

运行结果

借鉴

http://www.ai-start.com/ml2014/html/week3.htmlhttp://www.ai-start.com/ml2014/html/week3.html

机器学习(三)---Logistic回归相关推荐

  1. 机器学习实战--Logistic回归与实例:从疝病症预测病马的死亡率

    声明 本文参考了<机器学习实战>书中代码,结合该书讲解,并加之自己的理解和阐述 机器学习实战系列博文 机器学习实战--k近邻算法改进约会网站的配对效果 机器学习实战--决策树的构建.画图与 ...

  2. 机器学习:Logistic回归处理用气象数据预测森林火灾的数据挖掘方法

    文章目录 线性模型与回归 最小二乘与参数求解 1.一维数据: 2.多维数据 最大似然估计 Logistic回归 基本介绍 基于Logistic回归和Sigmoid函数的分类 基于最优化方法的最佳回归系 ...

  3. 机器学习之Logistic回归(逻辑蒂斯回归)

    Logistic回归又称Logistic回归分析,主要在流行病学中应用较多,比较常用的情形是探索某疾病的危险因素,根据危险因素预测某疾病发生的概率,等等. 应用: 一.寻找危险因素,正如上面所说的寻找 ...

  4. 机器学习-监督学习-logistic回归,softMax回归

    本篇博文来总结一下回归模型里面两个非常重要的模型. logistic回归 softMAX回归 Logistic回归 logistics回归虽然有"回归"两字但是却是分类模型,并且是 ...

  5. 机器学习实战——Logistic回归

    书籍:<机器学习实战>中文版 IDE:PyCharm Edu 4.02 环境:Adaconda3  python3.6 关键词:sigmoid函数.批梯度上升法.随机梯度上升法 from ...

  6. 机器学习:Logistic回归介绍

    Logistic回归定义 简单来说, 逻辑回归(Logistic Regression)是一种用于解决二分类(0 or 1)问题的机器学习方法,用于估计某种事物的可能性.比如某用户购买某商品的可能性, ...

  7. 机器学习实战 - Logistic回归

    假设我们有 一些数据点,我们用一条直线对其进行拟合,那么拟合的过程就称为回归. 实际上Logistic回归经常用于二类分类,也就是一般只用于只存在两种诸如"是"与"不是& ...

  8. 【机器学习】Logistic回归---学习笔记(重新整理)

    Logistic回归学习笔记 Logistic回归学习线路 预备知识:建议先去B站学习一下信息量,熵,BL散度,交叉熵的概念. Logistic回归的函数模型 损失函数.损失最小化架构 对数损失作为损 ...

  9. python实现logistic_用Python实现机器学习算法—Logistic 回归算法

    在 Logistic 回归中,我们试图对给定输入特征的线性组合进行建模,来得到其二元变量的输出结果.例如,我们可以尝试使用竞选候选人花费的金钱和时间信息来预测选举的结果(胜或负).Logistic 回 ...

  10. 入门机器学习(四)--Logistic回归

    1.分类(Classification) 如何开发一个分类算法,以对肿瘤进行恶性或良性分类为例. 如果要对以上数据进行线性回归可以这么做: 如果h(x)≥0.5,那么输出为"y=1" ...

最新文章

  1. UVA10020(最小区间覆盖)
  2. 解决 supervisor中stop django进程不能真正的停止 问题
  3. PHP全栈开发(八):CSS Ⅹ 导航栏制作
  4. C#中HashTable、Dictionary、ConcurrentDictionary区别
  5. discuz和php的区别,discuz和phpwind优劣比较
  6. 【转】JS判断SWF,JPG加载完毕、兼容(Activex,plugIn)所有浏览器
  7. idea结合git教程(拉取项目,提交代码,合代码等等)
  8. 利用青龙面板自动化跑聚看点脚本
  9. 51单片机学习1-8
  10. 基于simulink的微电网虚拟同步发电机vsg控制系统仿真
  11. 适当的发泄 有助于自我调整
  12. NB-IoT、LoRa、eMTC、Zigbee、Sigfox、WiFi、蓝牙,谁能称霸物联网时代?
  13. 关于物联网你需要知道的一切
  14. Java Vue uni-app 三端实现,滑动拼图验证码
  15. 2020金融科技领域最具商业合作价值企业盘点
  16. 计算机桌面保护时间,电脑处于屏幕保护或者休眠状态的时间怎么自己设置?
  17. CloudFoundry 环境上的 Java 应用开发如何指定 build pack
  18. 04、【电脑维修】Win 10重新安装微软商店以及便筏打不开问题
  19. 《数字图像处理》自学笔记(一)
  20. 亚马逊kindle设置_在亚马逊Kindle上追逐活跃的社会工程欺诈

热门文章

  1. Qt中的问题和方法总结
  2. linux禁止ftp下载文件,Linux命令之sz - 下载文件,无需ftp/sftp
  3. 微信小程序之export和import
  4. 中考计算机考试评分标准,2021北京中考英语听说机考题型分值及满分技巧
  5. linux管理mysql数据库的工具_最受Linux用户喜爱的9款数据库管理工具!
  6. Apache Solr 9.1-(一)初体验单机模式运行
  7. 中医理论质疑文章集锦
  8. WPF 自定义 ToggleButton 样式
  9. 【.Net实用方法总结】 整理并总结System.IO中DirectoryInfo类及其方法介绍
  10. 【编程不良人】MongoDB最新实战教程学习笔记