Scikit-learn——LogisticRegression与SGDClassifier

1.sklearn.linear_model.logistic regression

一般来说,逻辑回归用梯度下降算法来求解参数比较常见;所以这也导致一开始误以为LogisticRegression模型就是用梯度下降算法来实现的,当遇到SGDClassifier(Stochastic Gradient Descent)随机梯度下降分类器的时候,就有点蒙了。梯度下降明明是一个求解算法,怎么就和分类器扯上关系了。原来SGDClassifier是一系列采用了梯度下降来求解参数的算法的集合,例如(SVM, logistic regression)等;

而sklearn中,LogisticRegression的实现方法是基于“liblinear”, “newton-cg”, “lbfgs” and “sag”这些库来实现的,当数据集特别大的时候,推荐使用SGDClassifier中的逻辑回归。下面简单介绍一下LogisticRegression的使用。

由于对于实现方法原理不是很清楚,所以所有参数就暂时都保持默认吧。

lr=LogisticRegression() # 初始化模型
lr.fit(X_train,y_train) # 拟合
  • 1
  • 2

2.sklearn.linear_model.SGDClassifier

SGDClassifier是一个用随机梯度下降算法训练的线性分类器的集合。默认情况下是一个线性(软间隔)支持向量机分类器。顺便说一句,有人可能会疑惑:大多数SVM的求解不都是用的SMO算法么?怎么这儿又跑来一个SGD算法。原因是因为,支持向量机的另一个解释就是最小化合页损失函数(详见李航统计学习方法P113)。因此,该损失函数同样可以通过梯度下降算法来求解参数。下面是SGDClassifier的基本使用方法:

需要注意的是,梯度下降对数据的范围异常敏感,所有要先进行Feature scaling

参数表含义
loss损失函数选择项,字符串型;默认为’hinge’即SVM;’log’为逻辑回归
penalty惩罚方式,字符串型;默认为’l2’;其余有’none’,’l1’,’elasticnet’
alpha惩罚参数,浮点型;默认值为0.0001
n_iter迭代次数,整数型;默认值为5
learning_rate学习速率,字符串型;默认值为’optimal’,根据alpha计算得到
属性表含义
coef_参数
intercept_截距
方法表含义
fit(X,y)拟合
get_params()得到参数表中的所有参数
predict(X)预测
score(X,y)返回准确率

3.实例

import pandas as pd
import numpy as np
from sklearn.cross_validation import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.linear_model import SGDClassifier
from sklearn.metrics import classification_report

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('./DataSets/breast-cancer-wisconsin.data',names=column_name) # 读取数据集

data=data.replace(to_replace='?',value=np.nan) #将缺失值替换成NAN,(原始数据集缺失值用的是问号)

data=data.dropna(how='any') # 去掉所有包含缺失值的样本点

X_train,X_test,y_train,y_test=\
    train_test_split(data[column_name[1:10]],data[column_name[10]],test_size=0.25,random_state=33) # 取前10列为X,第10列为y,并且分割;random_state参数的作用是为了保证每次运行程序时都以同样的方式进行分割

#print y_train.value_counts() # 查看分割后的数据集
#print y_test.value_counts()

ss=StandardScaler() #feature scaling 
X_train=ss.fit_transform(X_train)
X_test=ss.fit_transform(X_test)



lr=LogisticRegression()
lr.fit(X_train,y_train)
lr_pre=lr.predict(X_test)
print lr.score(X_test,y_test)
print classification_report(y_test,lr_pre,
                            target_names=['Benign','Malignant'])



print

sgdc=SGDClassifier(loss='log')
sgdc.fit(X_train,y_train)
sgdc_pre = sgdc.predict(X_test)
print sgdc.score(X_test,y_test)
print classification_report(y_test,sgdc_pre,
                            target_names=['Benign','Malignant'])


>>
>>
>>
0.970760233918
             precision    recall  f1-score   support

     Benign       0.96      0.99      0.98       100
  Malignant       0.99      0.94      0.96        71

avg / total       0.97      0.97      0.97       171


0.988304093567
             precision    recall  f1-score   support

     Benign       0.99      0.99      0.99       100
  Malignant       0.99      0.99      0.99        71

avg / total       0.99      0.99      0.99       171
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68

源码及数据集

版权声明:转载请注明出处 https://blog.csdn.net/The_lastest/article/details/79100463

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值