# Logistic算法

## 谷歌笔记本（可选）

from google.colab import drive
drive.mount("/content/drive")
Mounted at /content/drive

## Logistic回归

• 优点：计算代价不高，易于理解和实现
• 缺点：容易欠拟合，分类精度可能不高
• 适用数据类型：数值型和标称型数据

## Sigmoid函数

### 训练算法：使用梯度上升找到最佳参数

def loadDataSet():
dataMat = []
labelMat = []
fr = open('/content/drive/MyDrive/Colab Notebooks/MachineLearning/《机器学习实战》/Logistic回归/Logistic回归/testSet.txt')
lineArr = line.strip().split()
dataMat.append([1.0, float(lineArr[0]), float(lineArr[1])])
labelMat.append(int(lineArr[2]))
return dataMat, labelMat

from math import *
def sigmoid(inX):
return 1.0/(1+exp(-inX))
from numpy import *
dataMatrix = mat(dataMatIn)
labelMat = mat(classLabels).transpose()
m, n = shape(dataMatrix)
alpha = 0.001
maxCycles = 500
weights = ones((n, 1))
for k in range(maxCycles):
h = sigmoid(dataMatrix * weights)
error = (labelMat - h)
weights = weights + alpha * dataMatrix.transpose() * error
return weights

1. 导入numpy库，用于矩阵运算。
3. 将dataMatIn和classLabels转化为矩阵，并进行转置，得到dataMatrix和labelMat。
4. 获取dataMatrix的行数m和列数n。
5. 设置学习率alpha为0.001，并设定最大迭代次数maxCycles为500。
6. 初始化权重weights为全1的n行1列矩阵。
7. 进行maxCycles次迭代：

a. 计算当前权重对应的预测结果h，通过sigmoid函数将dataMatrix与weights相乘得到。

b. 计算误差error，即真实标签labelMat与预测结果h的差。

c. 更新权重weights，通过乘以学习率alpha，再乘以dataMatrix的转置，再乘以误差error。

8.返回最终的权重weights。

dataArr, labelMat = loadDataSet()
weights = gradAscent(dataArr, labelMat)

### 分析数据：画出决策边界

import matplotlib.pyplot as plt
def plotBestFit(weights):
dataArr = array(dataMat)
n = shape(dataArr)[0]
xcord1 = []
ycord1 = []
xcord2 = []
ycord2 = []
for i in range(n):
if int(labelMat[i]) == 1:
xcord1.append(dataArr[i,1])
ycord1.append(dataArr[i,2])
else:
xcord2.append(dataArr[i,1])
ycord2.append(dataArr[i,2])
fig = plt.figure()
ax.scatter(xcord1, ycord1, s=30, c='red', marker='s')
ax.scatter(xcord2, ycord2, s=30, c='green')
x = arange(-3, 3, 0.1)
y = (-weights[0]-weights[1]*x) / weights[2]
ax.plot(x, y)
plt.xlabel('X1')
plt.ylabel('X2')
plt.show()

plotBestFit(weights.getA())

### 训练算法：随机梯度上升

def stocGradAscent0(dataMatrix, classLabels):
m, n = shape(dataMatrix)
alpha = 0.01
weights = ones(n)
for i in range(m):
h = sigmoid(sum(dataMatrix[i] * weights))
error = classLabels[i] - h
weights = weights + alpha * error * dataMatrix[i]
return weights

dataArr, labelMat = loadDataSet()
weights = stocGradAscent0(array(dataArr), labelMat)

### 改进算法：优化梯度算法

def stocGradAscent1(dataMatrix, classLabels, numIter=150):
m, n = shape(dataMatrix)
weights = ones(n)
for j in range(numIter):
dataIndex = list(range(m))
for i in range(m):
alpha = 4/(1+j+i)+0.01
randIndex = int(random.uniform(0, len(dataIndex)))
h = sigmoid(sum(dataMatrix[randIndex] * weights))
error = classLabels[randIndex] - h
weights = weights + alpha * error * dataMatrix[randIndex]
del(dataIndex[randIndex])
return weights

1.初始化权重为一个长度为n的向量，每个元素的初始值为1。

2.对于给定的迭代次数，重复以下步骤：

a. 初始化一个包含样本索引的列表(dataIndex)。

b. 对于每个样本，重复以下步骤：

i. 计算学习率(alpha)，其中alpha的值随着迭代次数和样本的索引i和j的变化而变化。这里使用的是固定的学习率，并加上一个小的常数以避免除零错误。

ii. 从dataIndex中随机选择一个样本的索引(randIndex)。

iii. 计算样本的预测概率(h)。这里使用的是sigmoid函数将线性组合转换为[0, 1]之间的概率值。

iv. 计算误差(error)，即实际标签(classLabels)与预测概率(h)之间的差值。

v. 更新权重(weights)。根据梯度上升算法，使用学习率(alpha)乘以误差(error)乘以样本的特征值(dataMatrix[randIndex])，然后将得到的结果加到权重(weights)上。

vi. 从dataIndex中删除已经使用过的样本索引(randIndex)。

3.返回更新后的权重。

dataArr, labelMat = loadDataSet()
plotBestFit(weights)

|
1月前
|

logistic算法
logistic算法
38 0
|
13天前
|

15 1
|
9月前
|

【数学建模】逻辑回归算法(Logistic Resgression)
【数学建模】逻辑回归算法(Logistic Resgression)
81 0
|
12月前
|

181 0
|

115 0
|

【语音加密】基于混沌logistic算法实现语音信号加密解密附GUI界面
【语音加密】基于混沌logistic算法实现语音信号加密解密附GUI界面
196 0
|

217 0
|

【机器学习】Logistic 分类回归算法 （二元分类 & 多元分类）
【机器学习】Logistic 分类回归算法 （二元分类 & 多元分类）
354 0
|

ML：基于自定义数据集利用Logistic、梯度下降算法GD、LoR逻辑回归、Perceptron感知器、SVM支持向量机、LDA线性判别分析算法进行二分类预测(决策边界可视化)
ML：基于自定义数据集利用Logistic、梯度下降算法GD、LoR逻辑回归、Perceptron感知器、SVM支持向量机、LDA线性判别分析算法进行二分类预测(决策边界可视化)
104 0
|
1天前
|

**摘要：** 该研究利用遗传算法（GA）对混合发电系统进行优化配置，旨在最小化风能、太阳能及电池储能的成本并提升系统性能。MATLAB 2022a用于实现这一算法。仿真结果展示了一系列图表，包括总成本随代数变化、最佳适应度随代数变化，以及不同数据的分布情况，如负荷、风速、太阳辐射、弃电、缺电和电池状态等。此外，代码示例展示了如何运用GA求解，并绘制了发电单元的功率输出和年变化。该系统原理基于GA的自然选择和遗传原理，通过染色体编码、初始种群生成、适应度函数、选择、交叉和变异操作来寻找最优容量配置，以平衡成本、效率和可靠性。
29 11