当前位置:   article > 正文

sklearn保存svm分类模型_sklearn(四)逻辑回归

sklearn保存svm分类模型_sklearn(四)逻辑回归

v2-0d09149614969cacd24989e1219f3686_1440w.jpg?source=172ae18b

逻辑回归

是一个对数几率模型(又译作逻辑模型,评估模型,分类评估模型)是离散选择法模型之一,属于多重变量分析类别,是 一种广义的线性回归分析模型。

是社会学,生物统计学,临床,数量心理学,计量经济学,市场营销等统计实证分析的常用方法。

尽管叫逻辑回归,但是其实并不用于回归分析,而是用于分类,也称为对数回归,最大熵分类,或者对数线性分类器

举例子:胃癌病情分析,一组是胃癌,一组是非胃癌,因变量为是否胃癌;自变量可以又很多维度,比如:年龄,性别,饮食习惯等等。通过逻辑回归分析,可以得到自变量的权重,从而可以大致了解到底哪些因素是导致胃癌的危险因素,以及根据危险因素预测一个人患胃癌的可能性。

自变量:主动操作的变量,可以看做「因变量」的原因
因变量:因为「自变量」的变化而变化,可以看做「自变量」的结果。也是我们想要预测的结果。

该模型的适用条件:

  1. 因变量为二分类的分类变量或某件事情的发生率,并且是数值型变量。重复计数现象指标不适用于逻辑回归
  2. 残差和因变量都要服从二项分布。二项分布对应的是分类变量,不是正态分布,不是最小二乘法,而是最大拟然法来解决方程估计和检验问题。
  3. 自变量和逻辑概率是线性关系
  4. 个观测对象间互相独立。

主要用途:

  1. 寻找危险因素:比如导致某一严重后果的因素
  2. 预测:预测在不同的自变量情况下,发生某种情况的概率有多大
  3. 判别:和预测类似,判断某事务发证某种情况的概率有多大。

为什么出现(为什么需要这个技术)

  • 解决什么问题
解决二分类(0 or 1)问题的机器学习方法,用于估计某种事物的可能性,比如某用户购买某种商品的可能性;某人患病的可能性,某广告被点击的可能性。

同类技术有哪些

  1. 逻辑回归与线性回归都是一种广义线性模型,逻辑回归假设因变量 y 服从伯努利分布,而线性回归假设因变量 y 服从高斯分布。 因此与线性回归有很多相同之处,去除Sigmoid映射函数的话,逻辑回归算法就是一个线性回归。可以说,逻辑回归是以线性回归为理论支持的,但是逻辑回归通过Sigmoid函数引入了非线性因素,因此可以轻松处理0/1分类问题。
  2. 最大熵模型:最大熵在解决二分类问题时就是逻辑回归,在解决多分类问题时就是多项逻辑回归。
  3. 与SVM(支持向量机)。
    1. 都是分类算法,都是监督学习算法,都是判别式模型(判别模型不关心数据怎么生成的,只关心数据之间的差别,然后用差别来简单对给定的一个数据进行分类);都可以增加不同的正则项
    2. LR是一个统计的方法,SVM是一个几何的方法;SVM的处理方法值考虑support vectors,也就是和分类最相关的少数点去学习分类器,而LR通过非线性映射减小了离分类平面较远的点的权重,相对提升了与分类最相关的数据点的权重;LR的损失函数是交叉熵,SVM的损失函数是HingeLoss;LR是参数模型,svm是非参数模型。
  4. 与朴素贝叶斯:都是分类模型,LR是判别式模型,朴素贝叶斯是生成式模型,

优缺点各是什么

优点:

  • 实现简单,广泛的应用于工业问题上;
  • 分类时计算量非常小,速度很快,存储资源低;
  • 便利的观测样本概率分数;
  • 对逻辑回归而言,多重共线性并不是问题,它可以结合L2正则化来解决该问题;
  • 计算代价不高,易于理解和实现;

缺点:

  • 当特征空间很大时,逻辑回归的性能不是很好;
  • 容易欠拟合,一般准确度不太高
  • 不能很好地处理大量多类特征或变量;
  • 只能处理两分类问题(在此基础上衍生出来的softmax可以用于多分类),且必须线性可分
  • 对于非线性特征,需要进行转换;

sklearn 中的逻辑回归使用

sklearn.linear_model.LogisticRegression

简要步骤:

  1. from sklearn.model_selection import train_test_split
  2. from sklearn.datasets import load_digits
  3. from sklearn.linear_model import LogisticRegression
  4. LR = LogisticRegression(C=1.0, penalty='l1', tol=0.01)
  5. X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)
  6. LR.fit(X_train,y_train)
  7. LR.predict(X_test)
  8. LR.score(X_test,y_test)

sklearn 已经对机器学习算法进行了封装,在实际应用中,主要的工作就是对数据的预处理,挑选出好的特征,调式算法,多试一些算法,比较它们之间的性能,选择出好 模型。

import 

sklearn中的LR算法

  1. # 导入相关包
  2. from sklearn import datasets # sklearn自带数据集
  3. import numpy as np
  4. from sklearn.cross_validation import train_test_split
  5. iris = datasets.load_iris() # 由于Iris是很有名的数据集,scikit-learn已经原生自带了。
  6. X = iris.data[:, [2, 3]]
  7. y = iris.target # 标签已经转换成012
  8. X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0) # 为了看模型在没有见过数据集上的表现,随机拿出数据集中30%的部分做测试
  9. # 分开训练集、测试集
  10. # train= loan_data.iloc[0: 55596, :]
  11. # test= loan_data.iloc[55596:, :]
  12. # 为了追求机器学习和最优化算法的最佳性能,我们将特征缩放
  13. from sklearn.preprocessing import StandardScaler
  14. sc = StandardScaler()
  15. sc.fit(X_train) # 估算每个特征的平均值和标准差
  16. sc.mean_ # 查看特征的平均值,由于Iris我们只用了两个特征,所以结果是array([ 3.82857143, 1.22666667])
  17. sc.scale_ # 查看特征的标准差,这个结果是array([ 1.79595918, 0.77769705])
  18. X_train_std = sc.transform(X_train)
  19. # 注意:这里我们要用同样的参数来标准化测试集,使得测试集和训练集之间有可比性
  20. X_test_std = sc.transform(X_test)
  21. # 训练感知模型
  22. from sklearn.linear_model import Perceptron
  23. # n_iter:可以理解成梯度下降中迭代的次数
  24. # eta0:可以理解成梯度下降中的学习率
  25. # random_state:设置随机种子的,为了每次迭代都有相同的训练集顺序
  26. ppn = Perceptron(n_iter=40, eta0=0.1, random_state=0)
  27. ppn.fit(X_train_std, y_train)
  28. # 分类测试集,这将返回一个测试结果的数组
  29. y_pred = ppn.predict(X_test_std)
  30. # 计算模型在测试集上的准确性,我的结果为0.9,还不错
  31. accuracy_score(y_test, y_pred)

-

  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. from matplotlib.colors import ListedColormap
  4. def plot_decision_regions(X, y, classifier, test_idx=None, resolution=0.02):
  5. # setup marker generator and color map
  6. markers = ('s', 'x', 'o', '^', 'v')
  7. colors = ('red', 'blue', 'lightgreen', 'gray', 'cyan')
  8. cmap = ListedColormap(colors[:len(np.unique(y))])
  9. # plot the decision surface
  10. x1_min, x1_max = X[:, 0].min() - 1, X[:, 0].max() + 1
  11. x2_min, x2_max = X[:, 1].min() - 1, X[:, 1].max() + 1
  12. xx1, xx2 = np.meshgrid(np.arange(x1_min, x1_max, resolution), np.arange(x2_min, x2_max, resolution))
  13. Z = classifier.predict(np.array([xx1.ravel(), xx2.ravel()]).T)
  14. Z = Z.reshape(xx1.shape)
  15. plt.contourf(xx1, xx2, Z, alpha=0.4, cmap=cmap)
  16. plt.xlim(xx1.min(), xx1.max())
  17. plt.ylim(xx2.min(), xx2.max())
  18. # plot class samples
  19. for idx, cl in enumerate(np.unique(y)):
  20. plt.scatter(x=X[y == cl, 0], y=X[y == cl, 1],alpha=0.8, c=cmap(idx),marker=markers[idx], label=cl)
  21. # highlight test samples
  22. if test_idx:
  23. X_test, y_test = X[test_idx, :], y[test_idx]
  24. plt.scatter(X_test[:, 0], X_test[:, 1], c='', alpha=1.0, linewidth=1, marker='o', s=55, label='test set')

-

  1. from sklearn import datasets
  2. import numpy as np
  3. from sklearn.cross_validation import train_test_split
  4. iris = datasets.load_iris()
  5. X = iris.data[:, [2, 3]]
  6. y = iris.target
  7. X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)
  8. from sklearn.preprocessing import StandardScaler
  9. sc = StandardScaler()
  10. sc.fit(X_train)
  11. X_train_std = sc.transform(X_train)
  12. X_test_std = sc.transform(X_test)
  13. X_combined_std = np.vstack((X_train_std, X_test_std))
  14. y_combined = np.hstack((y_train, y_test))
  15. from sklearn.linear_model import LogisticRegression
  16. lr = LogisticRegression(C=1000.0, random_state=0)
  17. lr.fit(X_train_std, y_train)
  18. lr.predict_proba(X_test_std[0,:]) # 查看第一个测试样本属于各个类别的概率
  19. plot_decision_regions(X_combined_std, y_combined, classifier=lr, test_idx=range(105,150))
  20. plt.xlabel('petal length [standardized]')
  21. plt.ylabel('petal width [standardized]')
  22. plt.legend(loc='upper left')
  23. plt.show()

参考:

李亚鑫:逻辑回归(Logistic Regression)(一)​zhuanlan.zhihu.com
阿泽:【机器学习】逻辑回归(非常详细)​zhuanlan.zhihu.com
v2-35393b75f51c81bb3c09774e76a7d91c_ipico.jpg
一文看懂逻辑回归 - Logistic regression(基本概念+10个优缺点+案例)​easyai.tech
v2-a08e7915c79a6ece18fb78d6d45f5ce3_180x120.jpg
https://www.wikiwand.com/zh/%E9%82%8F%E8%BC%AF%E8%BF%B4%E6%AD%B8​www.wikiwand.com logistic回归_百度百科​baike.baidu.com
v2-54d650fd001b99766a728e863f9b0660_180x120.jpg
逻辑回归(Logistic regression)详解-并用scikit-learn训练逻辑回归拟合Iris数据集​blog.csdn.net
v2-b981620e8dfd0e3f14849e5d8240edf6_ipico.jpg
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/135544
推荐阅读
  

闽ICP备14008679号