一、Logistics回归

1.算法介绍

  Logistic回归是一种统计模型,它通常用于二分类问题。不同于线性回归直接模型输出连续值预测,Logistic回归的目标是估计一个事件发生的概率。模型的输出值被限制在0和1之间,这是通过逻辑函数(Logistic function),也被称为Sigmoid函数实现的。

  多重线性回归模型要求因变量是连续型的正态分布变量,且自变量与因变量呈线性关系。当因变量是分类变量,且自变量与因变量不呈线性关系时,就不能确足多重线性回归模型的适用条件。此时,处理该类资料常用Logistic回归模型。Logistic回归分析属于非线性回归,它是研究因变量为二项分类或多项分类结果与某些影响因素之间关系的一种多重回归分析方法。

2.算法优缺点

2.1优点:


  1.简单易解释:模型结构简单,参数具有明确的含义,可以直观地解释各个特征对分类结果的影响。例如,参数为正表示该特征增加时,样本属于正类的概率增加;参数为负则相反。
  2.计算效率高:训练和预测过程相对快速,对内存需求较小,适合处理大规模数据集。
可扩展性好:容易扩展到多分类问题,并且可以通过添加正则化项(如 L1、L2 正则化)来防止过拟合,提高模型的泛化能力。


2.2缺点:


  1.线性假设限制:假设特征与对数几率之间是线性关系,对于复杂的非线性数据,模型的表达能力有限,可能无法很好地拟合数据。
  2.对异常值敏感:异常值会对模型的参数估计产生较大影响,从而影响分类性能。
特征相关性要求:当特征之间存在高度相关性(多重共线性)时,会导致参数估计不稳定,难以准确确定每个特征的贡献。

3.算法介绍

3.1 logistics 方程定义:

其中,t 表示时间变量,a,b,c 为模型的参数;

为研究 Logistics 曲线好的增长特性,对 Logistics 方程求一阶导数:

3.2 Yule 算法

很容易得到 a 的估计值:

3.3 Rhodes 算法

根据 Logistics 方程可以得到:

利用最小二乘法(OLS)可以得到这个方程参数的估计值,进而 b 和 c 的估计值也可以进一步得到。

3.4 Nair 算法

Yule 算法的差分式结果可以进一步写成:

利用最小二乘法(OLS)可以得到这个方程的参数估计值,进而 b 和 c 的估计值也可以得到,

3.5 模型的基本形式

在实际应用该模型的时候,常常不是不是直接对P进行回归,而是先定义单调连续概率函数 π,于是Logistic模型就可以变形为:

二、代码实现

1. 数据集

-0.017612    14.053064    0
-1.395634    4.662541    1
-0.752157    6.538620    0
-1.322371    7.152853    0
0.423363    11.054677    0
0.406704    7.067335    1
0.667394    12.741452    0
-2.460150    6.866805    1
0.569411    9.548755    0
-0.026632    10.427743    0
0.850433    6.920334    1
1.347183    13.175500    0
1.176813    3.167020    1
-1.781871    9.097953    0
-0.566606    5.749003    1
0.931635    1.589505    1
-0.024205    6.151823    1
-0.036453    2.690988    1
-0.196949    0.444165    1
1.014459    5.754399    1
1.985298    3.230619    1
-1.693453    -0.557540    1
-0.576525    11.778922    0
-0.346811    -1.678730    1
-2.124484    2.672471    1
1.217916    9.597015    0
-0.733928    9.098687    0
-3.642001    -1.618087    1
0.315985    3.523953    1
1.416614    9.619232    0
-0.386323    3.989286    1
0.556921    8.294984    1
1.224863    11.587360    0
-1.347803    -2.406051    1
1.196604    4.951851    1
0.275221    9.543647    0
0.470575    9.332488    0
-1.889567    9.542662    0
-1.527893    12.150579    0
-1.185247    11.309318    0
-0.445678    3.297303    1
1.042222    6.105155    1
-0.618787    10.320986    0
1.152083    0.548467    1
0.828534    2.676045    1
-1.237728    10.549033    0
-0.683565    -2.166125    1
0.229456    5.921938    1
-0.959885    11.555336    0
0.492911    10.993324    0
0.184992    8.721488    0
-0.355715    10.325976    0
-0.397822    8.058397    0
0.824839    13.730343    0
1.507278    5.027866    1
0.099671    6.835839    1
-0.344008    10.717485    0
1.785928    7.718645    1
-0.918801    11.560217    0
-0.364009    4.747300    1
-0.841722    4.119083    1
0.490426    1.960539    1
-0.007194    9.075792    0
0.356107    12.447863    0
0.342578    12.281162    0
-0.810823    -1.466018    1
2.530777    6.476801    1
1.296683    11.607559    0
0.475487    12.040035    0
-0.783277    11.009725    0
0.074798    11.023650    0
-1.337472    0.468339    1
-0.102781    13.763651    0
-0.147324    2.874846    1
0.518389    9.887035    0
1.015399    7.571882    0
-1.658086    -0.027255    1
1.319944    2.171228    1
2.056216    5.019981    1
-0.851633    4.375691    1
-1.510047    6.061992    0
-1.076637    -3.181888    1
1.821096    10.283990    0
3.010150    8.401766    1
-1.099458    1.688274    1
-0.834872    -1.733869    1
-0.846637    3.849075    1
1.400102    12.628781    0
1.752842    5.468166    1
0.078557    0.059736    1
0.089392    -0.715300    1
1.825662    12.693808    0
0.197445    9.744638    0
0.126117    0.922311    1
-0.679797    1.220530    1
0.677983    2.556666    1
0.761349    10.693862    0
-2.168791    0.143632    1
1.388610    9.341997    0
0.317029    14.739025    0
 

2. 代码部分

import numpy as np
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score


def load_data(file_path):
    data = np.loadtxt(file_path, delimiter='\t')
    X = data[:, :2]
    y = data[:, 2]
    return X, y


# 加载数据
file_path = 'D:\\机器学习\\机器学习实验五\\testSet.txt'
X, y = load_data(file_path)

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 创建并训练Logistic回归模型
logistic_regression = LogisticRegression()
logistic_regression.fit(X_train, y_train)

# 进行预测
y_pred = logistic_regression.predict(X_test)

# 评估模型
accuracy = accuracy_score(y_test, y_pred)
print(f"模型在测试集上的准确率为: {accuracy * 100:.2f}%")

3. 输出结果:

三、总结

   Logistic回归是一种流行的统计方法,它在二分类问题中尤为常用,旨在通过估计事件发生的概率来进行预测。该模型利用Sigmoid函数将特征的线性组合转换成(0, 1)区间内的概率值。参数的估计通常采用最大似然法,可以通过如梯度下降等优化算法实现。Logistic回归的参数提供了对特征影响力的直观理解,增强了模型的解释性。为了处理特征与输出间的非线性关系,可以通过特征工程来增强模型的适用性。此外,模型可以通过正则化方法来防止过拟合。尽管Logistic回归天生是为二分类设计的,但它可以通过一对多等策略来处理多分类问题。在量化投资领域,Logistic回归可以用于预测股票价格的走势,但需要考虑到金融市场数据的非线性特性和效率。尽管存在一些局限性,Logistic回归仍然是一个在多个领域如金融、医疗和社会科学中非常有用的预测和分类工具。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐