0
点赞
收藏
分享

微信扫一扫

逻辑回归算法

心存浪漫 2022-03-30 阅读 115

逻辑回归 分类算法

逻辑回归核心思想

利用现有数据对分类边界建立回归方程,以此进行分类。

优点:
    (1)训练速度较快,分类的时候,计算量仅仅只和特征的数目相关;
    (2)简单易理解,模型的可解释性非常好,从特征的权重可以看到不同的特征对最后结果的影响;
    (3)适合二分类问题,不需要缩放输入特征;
    (4)内存资源占用小,因为只需要存储各个维度的特征值;

缺点:
    (1)不能用Logistic回归去解决非线性问题,因为Logistic的决策面试线性的;
    (2)对多重共线性数据较为敏感;
    (3)很难处理数据不平衡的问题;
    (4)准确率并不是很高,因为形式非常的简单(非常类似线性模型),很难去拟合数据的真实分布;
    (5)逻辑回归本身无法筛选特征,有时会用gbdt来筛选特征,然后再上逻辑回归

适用场景
    应用:
        用于分类:适合做很多分类算法的基础组件。
        用于预测:预测事件发生的概率(输出)。
        用于分析:单一因素对某一个事件发生的影响因素分析(特征参数值)。

    适用:
        基本假设:输出类别服从伯努利二项分布。
        样本线性可分。
        特征空间不是很大的情况。
        不必在意特征间相关性的情景。
        后续会有大量新数据的情况。

API

sklearn.liner_model.LogisticRegression(solver='liblinear', penalty='l2', C=1.0)
    solver:优化求解方式(默认开源的liblinear库实现,内部使用了坐标轴下降法来迭代优化损失函数)
        sag:根据数据集自动选择,随即平均梯度下降
    penalty:正则化的种类
    C:正则化力度


LogisticRegression方法相当于SGDClassifier(loss='log',penalty="")。
SGDClassifier实现了一个普通的随机梯度下降学习,也支持平均随机梯度下降法(ASGD),
可以通过设置average=True。而使用LogisticRegression(实现了SAG)

用逻辑回归算法对鸢尾花数据集进行分类预测.

from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris
import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split

# 1)获取数据
iris = load_iris()

# 2)划分数据集
x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, random_state=22)
 
# 3)特征工程:标准化
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)

# 4)逻辑回归算法预估器
estimator = LogisticRegression()
estimator.fit(x_train, y_train)


# 5)模型评估
# 方法1:直接比对真实值和预测值
y_predict = estimator.predict(x_test)
print("y_predict:\n", y_predict)
print("直接比对真实值和预测值:\n", y_test == y_predict)

# 方法2:计算准确率
score = estimator.score(x_test, y_test)
print("准确率为:\n", score)

 


逻辑回归对癌症分类

from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris
import pandas as pd
from sklearn.preprocessing import StandardScaler
import numpy as np
from sklearn.model_selection import train_test_split

# 1、读取数据
path = "https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data"
column_name = ['Sample code number', 'Clump Thickness', 'Uniformity of Cell Size', 'Uniformity of Cell Shape',
                   'Marginal Adhesion', 'Single Epithelial Cell Size', 'Bare Nuclei', 'Bland Chromatin',
                   'Normal Nucleoli', 'Mitoses', 'Class']

data = pd.read_csv(path, names=column_name)

# 2、缺失值处理
# 1)替换-》np.nan
data = data.replace(to_replace="?", value=np.nan)
# 2)删除缺失样本
data.dropna(inplace=True)

# 3、划分数据集

x_train, x_test, y_train, y_test = train_test_split(x, y)

# 4、标准化
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)

# 5、预估器流程
estimator = LogisticRegression()
estimator.fit(x_train, y_train)


# 6、模型评估
# 方法1:直接比对真实值和预测值
y_predict = estimator.predict(x_test)
print("y_predict:\n", y_predict)
print("直接比对真实值和预测值:\n", y_test == y_predict)

# 方法2:计算准确率
score = estimator.score(x_test, y_test)
print("准确率为:\n", score)
举报

相关推荐

0 条评论