07 线性分类器(Linear Classifiers)

机器学习中监督学习模型的任务重点在于,根据已有经验知识对未知样本的目标/标记进行预测。

根据目标预测变量的类型不同,把监督学习任务大体分为分类学习与回归预测两类。

监督学习任务的基本架构和流程

  1. 首先准备训练数据,可以是文本、图像、音频等;
  2. 然后抽取所需要的特征,形成特征向量(Feature Vectors);
  3. 接着,把这些特征向量连同对应的标记/目标(Labels)一并送入学习算法(Machine Learning Algorithm)中,训练处一个预测模型(Predictive Model);
  4. 然后,采用同样的特征抽取方法作用于新测试数据,得到用于测试的特征向量;
  5. 最后,使用预测模型对这些待测试的特征向量进行预测并得到结果(Expected Label)。

分类学习

最基础的是二分类(Binary Classification)问题,及判断是非,从两个类别中选择一个作为预测结果;除此之外还有多分类(Multiclass Classification)的问题,即在多于两个类别中选择一个;甚至还有多标签分类(Multi-label Classification)问题,与上述二分类及多分类问题不同,多标签分类问题判断一个样本是否同时属于多个不同类别。

线性分类器

#coding=UTF-8

#良/恶性乳腺癌肿瘤数据预处理
#导入pandas与numpy工具包
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(‘http://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
#[out]:(683, 11)

#准备良/恶性乳腺癌肿瘤训练、测试数据
#使用sklearn.cross_validation里的train_test_split模块用于分割数据
from sklearn.cross_validation import train_test_split
#随机采样25%的数据用于测试,剩下的75%用于构建训练集合
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()
#[out]:
# 2    344
# 4    168
# Name: Class, dtype: int64

#查验测试样本的数量和类别分布
y_test.value_counts()
#[out]:
# 2    100
# 4     71
# Name: Class, dtype: int64

#使用线性分类模型从事良/恶性肿瘤预测任务
#从sklearn.preprocessing里导入StandardScaler
from sklearn.preprocessing import StandardScaler
#从sklearn.linear_model里导入LogisticRegression与SGDClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.linear_model import SGDClassifier 

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

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

#从sklearn.metrics里导入classification_report模块
from sklearn.metrics import classification_report

#使用逻辑斯蒂回归模型自带的评分函数score获得模型在测试集上的准确性结果
print ‘Accuracy of LR Classifier:‘,lr.score(X_test,y_test)
#[out]: Accuracy of LR Classifier: 0.988304093567
#利用classification_report模块获得LogisticRegression其他三个指标的结果
print classification_report(y_test,lr_y_predict,target_names=[‘Begin‘,‘Malignant‘])
#              precision    recall  f1-score   support

#       Begin       0.99      0.99      0.99       100
#   Malignant       0.99      0.99      0.99        71

# avg / total       0.99      0.99      0.99       171

#使用随机梯度下降模型自带的评分函数score获得模型在测试集上的准确性结果
print ‘Accuracy of SGD Classifier:‘,sgdc.score(X_test,y_test)
#[out]: Accuracy of SGD Classifier: 0.988304093567
#利用classification_report模块获得SGDClassifier其他三个指标的结果
print classification_report(y_test,sgdc_y_predict,target_names=[‘Begin‘,‘Malignant‘])
#              precision    recall  f1-score   support

#       Begin       1.00      0.98      0.99       100
#   Malignant       0.97      1.00      0.99        71

# avg / total       0.99      0.99      0.99       171
 1 #coding=UTF-8
 2
 3 #良/恶性乳腺癌肿瘤数据预处理
 4 #导入pandas与numpy工具包
 5 import pandas as pd
 6 import numpy as np
 7
 8 #创建特征列表
 9 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‘]
10
11 #使用pandas.read_csv函数从互联网读取指定数据
12 data=pd.read_csv(‘http://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data‘,names=column_names)
13
14 #将?替换为标准缺失值表示
15 data=data.replace(to_replace=‘?‘,value=np.nan)
16 #丢弃带有缺失值的数据(只要有一个维度有缺失)
17 data=data.dropna(how=‘any‘)
18 #输出data的数据量和维度
19 data.shape
20 #[out]:(683, 11)
21
22
23 #准备良/恶性乳腺癌肿瘤训练、测试数据
24 #使用sklearn.cross_validation里的train_test_split模块用于分割数据
25 from sklearn.cross_validation import train_test_split
26 #随机采样25%的数据用于测试,剩下的75%用于构建训练集合
27 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)
28
29 #查验训练样本的数量和类别分布
30 y_train.value_counts()
31 #[out]:
32 # 2    344
33 # 4    168
34 # Name: Class, dtype: int64
35
36 #查验测试样本的数量和类别分布
37 y_test.value_counts()
38 #[out]:
39 # 2    100
40 # 4     71
41 # Name: Class, dtype: int64
42
43
44 #使用线性分类模型从事良/恶性肿瘤预测任务
45 #从sklearn.preprocessing里导入StandardScaler
46 from sklearn.preprocessing import StandardScaler
47 #从sklearn.linear_model里导入LogisticRegression与SGDClassifier
48 from sklearn.linear_model import LogisticRegression
49 from sklearn.linear_model import SGDClassifier
50
51 #标准化数据,保证每个维度的特征数据方差为1,均值为0。使得预测结果不会被某些维度过大的特征值而住到
52 ss=StandardScaler()
53 X_train=ss.fit_transform(X_train)
54 X_test=ss.transform(X_test)
55
56 #初始化LogisticRegression与SGDClassifier
57 lr=LogisticRegression()
58 sgdc=SGDClassifier()
59 #调用LogisticRegression中的fit函数/模块用来训练模型参数
60 lr.fit(X_train,y_train)
61 #使用训练好的模型lr对X_test进行预测,结果存储在变量lr_y_predict中
62 lr_y_predict=lr.predict(X_test)
63 #调用SGDClassifier中的fit函数/函数用来训练模型参数
64 sgdc.fit(X_train,y_train)
65 #使用训练好的模型sgdc对X_test进行预测,结果储存在变量sgdc_y_predict中
66 sgdc_y_predict=sgdc.predict(X_test)
67
68
69 #从sklearn.metrics里导入classification_report模块
70 from sklearn.metrics import classification_report
71
72 #使用逻辑斯蒂回归模型自带的评分函数score获得模型在测试集上的准确性结果
73 print ‘Accuracy of LR Classifier:‘,lr.score(X_test,y_test)
74 #[out]: Accuracy of LR Classifier: 0.988304093567
75 #利用classification_report模块获得LogisticRegression其他三个指标的结果
76 print classification_report(y_test,lr_y_predict,target_names=[‘Begin‘,‘Malignant‘])
77 #              precision    recall  f1-score   support
78
79 #       Begin       0.99      0.99      0.99       100
80 #   Malignant       0.99      0.99      0.99        71
81
82 # avg / total       0.99      0.99      0.99       171
83
84 #使用随机梯度下降模型自带的评分函数score获得模型在测试集上的准确性结果
85 print ‘Accuracy of SGD Classifier:‘,sgdc.score(X_test,y_test)
86 #[out]: Accuracy of SGD Classifier: 0.988304093567
87 #利用classification_report模块获得SGDClassifier其他三个指标的结果
88 print classification_report(y_test,sgdc_y_predict,target_names=[‘Begin‘,‘Malignant‘])
89 #              precision    recall  f1-score   support
90
91 #       Begin       1.00      0.98      0.99       100
92 #   Malignant       0.97      1.00      0.99        71
93
94 # avg / total       0.99      0.99      0.99       171
时间: 2024-07-30 00:17:59

07 线性分类器(Linear Classifiers)的相关文章

线性分类器: Linear Classifier

线性分类器:通过线性映射,将数据分到对应的类别中 ①线性函数:f(xi?, W, b)= W * xi ?+ b W为权值(weights),b为偏移值(bias vector),xi为数据 假设每个图像数据被拉长为一个长度为D的列向量,其大小为[D x 1]:W是大小为[K x D]的矩阵,b是大小为大小[K x 1]的列向量 以CIFAR-10为例,xi包含第i个图像的所有像素信息,这些信息被拉成为一个[3072 x 1]的列向量,W的大小为[10 x 3072],b的大小为[10 x 1]

SVM入门(二)线性分类器Part 1

线性分类器(一定意义上,也可以叫做感知机) 是最简单也很有效的分类器形式.在一个线性分类器中,可以看到SVM形成的思路,并接触很多SVM的核心概念.用一个二维空间里仅有两类样本的分类问题来举个小例子.如图所示 C1和C2是要区分的两个类别,在二维平面中它们的样本如上图所示.中间的直线就是一个分类函数,它可以将两类样本完全分开.一般的,如果一个线性函数能够将样本完全正确的分开,就称这些数据是线性可分的,否则称为非线性可分的. 什么叫线性函数呢?在一维空间里就是一个点,在二维空间里就是一条直线,三维

SVM入门(三)线性分类器Part 2

上回说到对于文本分类这样的不适定问题(有一个以上解的问题称为不适定问题),需要有一个指标来衡量解决方案(即我们通过训练建立的分类模型)的好坏,而分类间隔是一个比较好的指标.    在进行文本分类的时候,我们可以让计算机这样来看待我们提供给它的训练样本,每一个样本由一个向量(就是那些文本特征所组成的向量)和一个标记(标示出这个样本属于哪个类别)组成.如下:Di=(xi,yi).xi就是文本向量(维数很高),yi就是分类标记.    在二元的线性分类中,这个表示分类的标记只有两个值,1和-1(用来表

cs231n笔记:线性分类器

cs231n线性分类器学习笔记,非翻译,根据自己的学习情况总结出的内容: 线性分类 本节介绍线性分类器,该方法可以自然延伸到神经网络和卷积神经网络中,这类方法主要有两部分组成,一个是评分函数(score function):是原始数据和类别分值的映射,另一个是损失函数:它是用来衡量预测标签和真是标签的一致性程度.我们将这类问题转化为优化问题,通过修改参数来最小化损失函数. 首先定义一个评分函数,这个函数将输入样本映射为各个分类类别的得分,得分的高低代表该样本属于该类别可能性的高低.现在假设有一个

机器学习基础笔记(2):最简单的线性分类器

监督学习多用来解决分类问题,输入的数据由特征和标签两部分构成.我们由浅入深地介绍一些经典的有监督的机器学习算法. 这里介绍一些比较简单容易理解的处理线性分类问题的算法. 线性可分&线性不可分 首先,什么是线性分类问题?线性分类问题是指,根据标签确定的数据在其空间中的分布,可以使用一条直线(或者平面,超平面)进行分割.如下图就是一个线性分类问题.这样的问题也叫做线性可分的. 当然,也存在着许多线性不可分的情况,例如下图所示 解决线性不可分问题往往相对复杂,我们从简单的线性可分问题开始探讨. 最简单

深度学习中得数学,高效计算基础与线性分类器

深度学习说到底就是要调节网络中得权重,使网络的分类结果更接近于训练值.这个重复迭代的过程又是一个线性回归的问题.在这种可能会用到高数,线性代数,概率论中的知识. 一.数学基础提一提. 1.高数中得知识. 高数中最重要的就是微积分了,那在深度学习中出现最多的一个概念就是梯度.什么是梯度呢?要说导数,学过高数的肯定都知道.其实梯度就是当把标量x变成向量X时,对X求导就是梯度.那为什么要用梯度呢?因为梯度等于0在凸函数中往往代表着一个极小值点.我们要求得就是损失函数的极小值,这正是我们需要的.梯度是指

cs231n笔记 (一) 线性分类器

线性分类器用作图像分类主要有两部分组成:一个是假设函数, 它是原始图像数据到类别的映射.另一个是损失函数,该方法可转化为一个最优化问题,在最优化过程中,将通过更新假设函数的参数值来最小化损失函数值. 从图像到标签分值的参数化映射 该方法的第一部分就是定义一个评分函数,这个函数将图像的像素值映射为各个分类类别的得分,得分高低代表图像属于该类别的可能性高低.下面会利用一个具体例子来展示该方法.现在假设有一个包含很多图像的训练集 $x_i \in \mathbb{R}^D$,每个图像都有一个对应的分类

模式识别: 线性分类器

一.实验目的和要求 目的: 了解线性分类器,对分类器的参数做一定的了解,理解参数设置对算法的影响. 要求: 1. 产生两类样本 2. 采用线性分类器生成出两类样本的分类面 3. 对比线性分类器的性能,对比参数设置的结果 二.实验环境.内容和方法 环境:windows 7,matlab R2010a 内容:通过实验,对生成的实验数据样本进行分类. 三.实验基本原理 感知器基本原理: 1.感知器的学习过程是不断改变权向量的输入,更新结构中的可变参数,最后实现在有限次迭代之后的收敛.感知器的基本模型结

【转】SVM入门(六)线性分类器的求解——问题的转化,直观角度

SVM入门(六)线性分类器的求解--问题的转化,直观角度 让我再一次比较完整的重复一下我们要解决的问题:我们有属于两个类别的样本点(并不限定这些点在二维空间中)若干,如图, 圆形的样本点定为正样本(连带着,我们可以把正样本所属的类叫做正类),方形的点定为负例.我们想求得这样一个线性函数(在n维空间中的线性函数): g(x)=wx+b 使得所有属于正类的点x+代入以后有g(x+)≥1,而所有属于负类的点x-代入后有g(x-)≤-1(之所以总跟1比较,无论正一还是负一,都是因为我们固定了间隔为1,注