监督学习经典模型

机器学习中的监督学习模型的任务重点在于,根据已有的经验知识对未知样本的目标/标记进行预测。根据目标预测变量的类型不同,我们把监督学习任务大体分为分类学习回归预测两类。监督学习任务的基本流程:首先准备训练数据,可以是文本、图像、音频等;然后抽取所需要的特征,形成特征向量,接着把这些特征向量连同对应的标记/目标(Labels)一并送入学习算法中,训练一个预测模型,然后采用同样的特征抽取方法作用于新测试数据,得到用于测试的特征向量,最后使用预测模型对这些待测试的特征向量进行预测并得到结果。

1.分类学习

最基础的是二分类问题,即判断是非,从两个类别中选择一个作为预测结果。多分类问题,即在多余两个类别中选择一个,多标签分类问题,判断一个样本是否同时属于多个不同类别。

1.1线性分类器

模型介绍:线性分类器是一种假设特征与分类结果存在线性关系的模型。通过累加计算每个维度的特征与各自权重的乘积来帮助类别决策。

如果我们定义x=<x1,x2,...,xn>来代表n维特征列向量,同时用n维列向量w=<w1,w2,...wn>来代表对应得权重,避免坐标过坐标原点,假设截距为b。线性关系可表达为:

f(w,x,b)=wTx+b

我们所要处理的简单二分类问题希望f∈{0,1};因此需要一个函数把原先的f∈R映射到(0,1),逻辑斯蒂函数:

g(z)=1/(1+e-z)

将z替换为f,逻辑斯蒂回归模型:

hw,b(x)=g(f(w,x,b))=1/(1+e-f)=1/(1+e-(wTx+b)

实例1:良/恶性乳腺癌肿瘤预测----------逻辑斯蒂回归分类器

数据描述:

Number of Instances: 699 (as of 15 July 1992)

Number of Attributes: 10 plus the class attribute
Attribute Information: (class attribute has been moved to last column)

   #  Attribute                     Domain

-- -----------------------------------------

1. Sample code number            id number

2. Clump Thickness               1 - 10

3. Uniformity of Cell Size       1 - 10

4. Uniformity of Cell Shape      1 - 10

5. Marginal Adhesion             1 - 10

6. Single Epithelial Cell Size   1 - 10

7. Bare Nuclei                   1 - 10

8. Bland Chromatin               1 - 10

9. Normal Nucleoli               1 - 10

10. Mitoses                       1 - 10

11. Class:                        (2 for benign, 4 for malignant)

Missing attribute values: 16

There are 16 instances in Groups 1 to 6 that contain a single missing

(i.e., unavailable) attribute value, now denoted by "?".

Class distribution:

Benign: 458 (65.5%)

Malignant: 241 (34.5%)

 #步骤一:良/恶性乳腺癌肿瘤数据预处理

#导入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('https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data',names=column_names)

# print(data)#[699 rows x 11 columns]

# print(data[:5])

#Sample code number Clump Thickness Uniformity of Cell Size \

#0 1000025 5 1

#1 1002945 5 4

#2 1015425 3 1

#3 1016277 6 8

#4 1017023 4 1

#Uniformity of Cell Shape Marginal Adhesion Single Epithelial Cell Size \

#0 1 1 2

#1 4 5 7

#2 1 1 2

#3 8 1 3

#4 1 3 2

#Bare Nuclei Bland Chromatin Normal Nucleoli Mitoses Class

#0 1 3 1 1 2

#1 10 3 2 1 2

#2 2 3 1 1 2

#3 4 3 7 1 2

#4 1 3 1 1 2

data=data.replace(to_replace='?',value=np.nan)

data=data.dropna(how='any')

print(data.shape)#(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)

#检查训练样本的数量和类别分布

print(y_train.value_counts())

# 2 344

# 4 168

# Name: Class, dtype: int64

print(y_test.value_counts())

# 2 100

# 4 71

# Name: Class, dtype: int64

 #步骤三:使用线性分类模型从事良/恶性肿瘤预测任务

#从sklearn.preprocessing里导入StandardScaler

from sklearn.preprocessing import StandardScaler

#从sklearn.preprocessing里导入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.fit_transform(X_test)

#初始化LogisticRegression与SGDClassifier

lr=LogisticRegression()

sgdc=SGDClassifier()

#调用LogisticRegression中的fit函数/模块用来训练模型参数

lr.fit(X_train,y_train)

#使用训练好的模型lr对X_test

lr_y_predict=lr.predict(X_test)

#调用SGDClassifier中的fit函数/模块用来训练模型参数

sgdc.fit(X_train,y_train)

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))

#利用classification_report模块获得LogisticRegression其他三个指标的结果。

print(classification_report(y_test,lr_y_predict,target_names=['Benign','Malignant']))

#使用随机梯度下降模型自带的评分函数score获得模型在测试集上的准确性结果

print('Accuracy of SGD Classifier:',sgdc.score(X_test,y_test))

#利用classification_report模块获得LogisticRegression其他三个指标的结果。

print(classification_report(y_test,sgdc_y_predict,target_names=['Benign','Malignant']))

Python机器学习(基础篇---监督学习(线性分类器))的更多相关文章

  1. Python机器学习基础教程-第2章-监督学习之决策树集成

    前言 本系列教程基本就是摘抄<Python机器学习基础教程>中的例子内容. 为了便于跟踪和学习,本系列教程在Github上提供了jupyter notebook 版本: Github仓库: ...

  2. Python机器学习基础教程-第2章-监督学习之决策树

    前言 本系列教程基本就是摘抄<Python机器学习基础教程>中的例子内容. 为了便于跟踪和学习,本系列教程在Github上提供了jupyter notebook 版本: Github仓库: ...

  3. Python机器学习基础教程-第2章-监督学习之线性模型

    前言 本系列教程基本就是摘抄<Python机器学习基础教程>中的例子内容. 为了便于跟踪和学习,本系列教程在Github上提供了jupyter notebook 版本: Github仓库: ...

  4. Python机器学习基础教程-第2章-监督学习之K近邻

    前言 本系列教程基本就是摘抄<Python机器学习基础教程>中的例子内容. 为了便于跟踪和学习,本系列教程在Github上提供了jupyter notebook 版本: Github仓库: ...

  5. Python 机器学习实战 —— 无监督学习(上)

    前言 在上篇<Python 机器学习实战 -- 监督学习>介绍了 支持向量机.k近邻.朴素贝叶斯分类 .决策树.决策树集成等多种模型,这篇文章将为大家介绍一下无监督学习的使用.无监督学习顾 ...

  6. Python 机器学习实战 —— 无监督学习(下)

    前言 在上篇< Python 机器学习实战 -- 无监督学习(上)>介绍了数据集变换中最常见的 PCA 主成分分析.NMF 非负矩阵分解等无监督模型,举例说明使用使用非监督模型对多维度特征 ...

  7. Python机器学习基础教程-第1章-鸢尾花的例子KNN

    前言 本系列教程基本就是摘抄<Python机器学习基础教程>中的例子内容. 为了便于跟踪和学习,本系列教程在Github上提供了jupyter notebook 版本: Github仓库: ...

  8. Python机器学习基础教程

    介绍 本系列教程基本就是搬运<Python机器学习基础教程>里面的实例. Github仓库 使用 jupyternote book 是一个很好的快速构建代码的选择,本系列教程都能在我的Gi ...

  9. Python机器学习(基础篇---监督学习(支持向量机))

    支持向量机(分类) 支持向量机分类器根据训练样本的分布,搜索所有可能的线性分类器中最佳的那个.我们会发现决定其直线位置的样本并不是所有训练数据,而是其中的两个空间间隔最小的两个不同类别的数据点,而我们 ...

随机推荐

  1. CSS实现水平垂直居中的1010种方式

    转载自:CSS实现水平垂直居中的1010种方式 划重点,这是一道面试必考题,很多面试官都喜欢问这个问题,我就被问过好几次了 要实现上图的效果看似很简单,实则暗藏玄机,本文总结了一下CSS实现水平垂直居 ...

  2. python内建数据类型有哪些

    整型--int 布尔型--bool 字符串--str 列表--list 元组--tuple 字典--dict

  3. Linux(例如CentOS 7)打开TCP 22端口,基于SSH协议

    SSH 为 Secure Shell 的缩写,由 IETF 的网络工作小组(Network Working Group)所制定:SSH 为建立在应用层和传输层基础上的安全协议.SSH 是目前较可靠,专 ...

  4. structure

    https://wenku.baidu.com/view/a82b12d62dc58bd63186bceb19e8b8f67c1cef04.html?sxts=1541829436140

  5. springboot 返回json字符串格式化问题

    在idea中yml文件中添加以下注解就可以格式化json字符串效果 spring: jackson: serialization: indent-output: true 原返回json格式为: {& ...

  6. FreeMarker与Thymeleaf

    FreeMarker 是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯 Java 编写,FreeMarker 被设计用来生成 HTML Web 页面,特别是基于 MVC 模式的应用程序,虽然 ...

  7. python爬虫-入门-了解爬虫

    作为一个爬虫新手,我觉得首先要了解爬虫是的作用以及应用. 作用:通过爬虫获取网页内的信息.包括:标题(title)图片(image)链接(url)等等 应用:抽取所需信息,进行数据汇总及分析(从事网页 ...

  8. 关于git的诞生

    看了某某大佬的Git教程,简单易懂的同时,也让我对Git有了进一步的了解.搞半天,我们顶礼膜拜的分布式版本控制系统Git,是在这样的情况下产生的. linus在创建开源的linux系统的时候,并不是他 ...

  9. 从ranknet到lamdarank,再到lamdamart

    learn2rank目前基本两个分支,1是神经网络学派ranknet,lamdarank,另一个是决策树学派如gbrank,lamdamart 05年提出ranknet,算分模块是简单的全连接网络,l ...

  10. 数据结构与算法之PHP递归函数

    一.递归函数的定义 递归函数即自调用函数,在函数体内部直接或者间接的自己调用自己,即函数的嵌套调用是函数本身. 通常在此类型的函数题中会附加一个条件判断叙述,以判断是否需要执行递归调用,并且在特定的条 ...