2.1.1.1线性分类器

2.1监督学习经典模型
监督学习:


2.1.1分类学习
二分类:从两个类别中选择一个作为预测结果。
多类分类:多于两个类别中选择一个。
多标签分类:一个样本是否同时属于多个不同类别。

2.1.1.1线性分类器(linear classifier)
模型介绍:是一种假设特征与分类结果存在线性关系的模型。这个模型通过累加计算每个维度的特征与各自权重的乘积来帮助类别决策。
我们所要处理的最简单的二分类问题数据f属于{0,1};因此需要一个函数把原先的f属于R映射到{0,1}。于是我们想到了逻辑斯蒂函数。



我们可以观察到该模型如何处理一个待分类的特征向量:如果z=0,那么g=0.5;若z<0则g<0.5,这个特征向量被判别为一类;反之,若z>0,则g>0.5,其被归为另外一类。

数据描述

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:类型。2-良性,4-恶性

数据:共699条,良性肿瘤458条(65.5%),恶性肿瘤241条(34.5%),16条缺失值(?标出)。

数据预处理
import pandas as pd
import numpy as np
#创建特征列表
column_names=['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']
#使用pandas.read_csv函数从互联网读取指定函数
data=pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data',names=column_names)
#将?替换为标准缺失值表示
data=data.replace(to_replace='?',value=np.nan)
#丢弃带有缺失值的数据(只要有一个维度有缺失)
data=data.dropna(how='any')
#输出data的数据量和维度
data.shape

(683, 11)


训练、测试数据
#使用sklearn.cross_valiation里的train_test_split模块用于分割数据
from sklearn.cross_validation import train_test_split
#随机采样25%的数据用于测试,剩下的75%用于构建训练集合,设置 random_state 可以让每次划分训练集和验证集的时候都是完全一样的
X_train,X_test,y_train,y_test=train_test_split(data[column_names[1:10]],data[column_names[10]],test_size=0.25,random_state=33)
#查验训练样本的数量和类别分布
y_train.value_counts()

2 344
4 168
Name: Class, dtype: int64

#查验测试样本的数量和类别分布,683*0.25=171
y_test.value_counts()

2 100
4 71
Name: Class, dtype: int64

预测任务
from sklearn.preprocessing import StandardScaler
#标准化数据,保证每个维度的特征数据方差为1,均值为0.使得预测结果不会被某些维度过大的特征值而主导
ss=StandardScaler()
X_train=ss.fit_transform(X_train)
X_test=ss.transform(X_test)

LogisticRegression预测任务

from sklearn.linear_model import LogisticRegression
#初始化LogisticRregression
lr=LogisticRegression()
#调用LogisticRegression中的fit函数/模块用来训练模型参数
lr.fit(X_train,y_train)
#使用训练好的模型lr对X_test进行预测,结果储存在变量lr_y_predict中。
lr_y_predict=lr.predict(X_test)

SGDClassifier预测任务

from sklearn.linear_model import SGDClassifier
#初始化SGDClassifier
sgdc=SGDClassifier()
#调用SGDClassifier中的fit函数/模块用来训练模型参数
sgdc.fit(X_train,y_train)
#使用训练好的模型lr对X_test进行预测,结果储存在变量sgdc_y_predict中。
sgdc_y_predict=sgdc.predict(X_test)
性能测评

定义:
恶性肿瘤为阳性positive
良性肿瘤为阴性negative
真阳性true positive
假阳性false positive
真阴性true negative
假阴性false negative

评价指标:
精确性,对于给定的测试数据集,分类器正确分类的样本数与总样本数之比。
accuracy = (TP + TN) / (TP + FP + TN + FN)
精确率,所有"正确被检索的item(TP)"占所有"实际被检索到的(TP+FP)"的比例。
precision = TP / (TP + FP)
召回率,所有"正确被检索的item(TP)"占所有"应该检索到的item(TP+FN)"的比例。
recall = TP / (TP + FN)
F1指标,精确值和召回率的调和均值
F1 Score = 2P*R/(P+R),其中P和R分别为 precision 和 recall

预测任务的性能分析
from sklearn.metrics import classification_report
使用逻辑斯蒂回归模型自带的评分函数score获得模型在测试集上的准确性结果
print('Accuracy of LR Classifier:',lr.score(X_test,y_test))

Accuracy of LR Classifier: 0.988304093567

#利用classification_report模块获得LogisticRegression其他三个指标的结果
print(classification_report(y_test,lr_y_predict,target_names=['Benign','Malignant']))
#使用随机梯度下降模型自带的评分函数score获得模型在测试集上的准确性结果
print('Accuracy of LR Classifier:',sgdc.score(X_test,y_test))

Accuracy of LR Classifier: 0.964912280702

#利用classification_report模块获得SGDClassifier其他三个指标的结果
print(classification_report(y_test,sgdc_y_predict,target_names=['Benign','Malignant']))

question:最后两步的结果每次都不一样???

特点分析

线性分类器可以说是最基本和最常用的机器学习模型。尽管受限于数据特征与分类目标之间的线性假设,我们仍然可以在科学研究与工程实践中把线性分类器的表现性能作为基准。
LogisticRegression:对参数的计算采用精确解析的方式,计算时间长但是模型性能高。
SGDClassifier:采用随机梯度上升算法估计模型参数,计算时间短但是产出的模型性能低。适用于对于训练数据规模在10万量级以上的数据,考虑到时间的耗用,笔者更加推荐使用随机梯度算法对模型参数进行估计。

参考资料https://wenku.baidu.com/view/fe7e334d482fb4daa58d4b97.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容