Python机器学习(基础篇---监督学习(线性分类器))
监督学习经典模型
机器学习中的监督学习模型的任务重点在于,根据已有的经验知识对未知样本的目标/标记进行预测。根据目标预测变量的类型不同,我们把监督学习任务大体分为分类学习与回归预测两类。监督学习任务的基本流程:首先准备训练数据,可以是文本、图像、音频等;然后抽取所需要的特征,形成特征向量,接着把这些特征向量连同对应的标记/目标(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)
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机器学习(基础篇---监督学习(线性分类器))的更多相关文章
- Python机器学习基础教程-第2章-监督学习之决策树集成
前言 本系列教程基本就是摘抄<Python机器学习基础教程>中的例子内容. 为了便于跟踪和学习,本系列教程在Github上提供了jupyter notebook 版本: Github仓库: ...
- Python机器学习基础教程-第2章-监督学习之决策树
前言 本系列教程基本就是摘抄<Python机器学习基础教程>中的例子内容. 为了便于跟踪和学习,本系列教程在Github上提供了jupyter notebook 版本: Github仓库: ...
- Python机器学习基础教程-第2章-监督学习之线性模型
前言 本系列教程基本就是摘抄<Python机器学习基础教程>中的例子内容. 为了便于跟踪和学习,本系列教程在Github上提供了jupyter notebook 版本: Github仓库: ...
- Python机器学习基础教程-第2章-监督学习之K近邻
前言 本系列教程基本就是摘抄<Python机器学习基础教程>中的例子内容. 为了便于跟踪和学习,本系列教程在Github上提供了jupyter notebook 版本: Github仓库: ...
- Python 机器学习实战 —— 无监督学习(上)
前言 在上篇<Python 机器学习实战 -- 监督学习>介绍了 支持向量机.k近邻.朴素贝叶斯分类 .决策树.决策树集成等多种模型,这篇文章将为大家介绍一下无监督学习的使用.无监督学习顾 ...
- Python 机器学习实战 —— 无监督学习(下)
前言 在上篇< Python 机器学习实战 -- 无监督学习(上)>介绍了数据集变换中最常见的 PCA 主成分分析.NMF 非负矩阵分解等无监督模型,举例说明使用使用非监督模型对多维度特征 ...
- Python机器学习基础教程-第1章-鸢尾花的例子KNN
前言 本系列教程基本就是摘抄<Python机器学习基础教程>中的例子内容. 为了便于跟踪和学习,本系列教程在Github上提供了jupyter notebook 版本: Github仓库: ...
- Python机器学习基础教程
介绍 本系列教程基本就是搬运<Python机器学习基础教程>里面的实例. Github仓库 使用 jupyternote book 是一个很好的快速构建代码的选择,本系列教程都能在我的Gi ...
- Python机器学习(基础篇---监督学习(支持向量机))
支持向量机(分类) 支持向量机分类器根据训练样本的分布,搜索所有可能的线性分类器中最佳的那个.我们会发现决定其直线位置的样本并不是所有训练数据,而是其中的两个空间间隔最小的两个不同类别的数据点,而我们 ...
随机推荐
- T2027 蜈蚣
传送门 思路: 设 f[ i ][ j ] 为第 i 节,切到第 j 段的最大恶心值. 枚举 左端点 j ,右端点 i ,段数 k → 转移: f [ i ][ k ] = max ( f [ i ...
- layer结合art实现弹出功能
模板 <!-- 模板 --> <script id="render-tpl" type="text/html"> <table c ...
- DAY 21内存处理与正则
一.python的垃圾回收机制 1.引用计数(垃圾回收机制的根本) 1.引用计数是用来记录值的内存地址被记录的次数的 2.每一次对值地址的引用都可以使该值的引用计数+1 3.每一次对值地址的释放都可以 ...
- js对象跟数组多层嵌套,检测没有此数据就添加有则不添加以及超过限制条件删除操作
例如你需要这样格式的数据: [{"name":"合肥市","arrey":[{"lat":"31.862323 ...
- Django 管理站点
这一部分是关于 Django 的自动管理界面.这个特性是这样起作用的:它读取你模式中的元数据,然后提供给你一个强大而且可以使用的界面,网站管理者可以用它立即工作.在这里我们将讨论如何激活,使用和定制这 ...
- linux blast
建库 减压后,改名为blast,并在blas目录在建立db文件1,建立数据库makeblastdb -in db.fasta -dbtype nucl(prot) -parse_seqids -has ...
- Confluence 6 针对 'unmigrated-wiki-markup' 宏重新尝试合并
在签名的章节中,我们主要是针对没有完全合并完成余下的为合并内容的异常处理.最常见的情况是内容以及被合并了,但是页面使用 wiki 标记的内容没有被合并,通常这些 wiki 标记的内容使用了 'unmi ...
- yml配置文件读取出错 Exception in thread "main" while scanning for the next token found character '\t(TAB)'
这几天在学习springboot的微服务项目,在配置文件方面也想尝试下新的yml配置,就想把原来项目properties写的文件转换成yml试一下(老项目是之前检出在了eclipse里面),结果写好了 ...
- day1扩展作业
作业一:博客作业二:编写登陆接口,●输入用户名密码(有文件存储用户名,命名)●认证成功后显示欢迎信息●输错三次后锁定(再次运行程序,还是输入上次输入的就显示已被锁定)作业三:多级菜单●三级菜单 ●可依 ...
- require 4种引入方式的区别
以下四种引入方式的区别: 自己创建的包里面封装了一些方法,只是把aa文件夹放在了node_modules文件夹里,所以在引用时,不需要写上相对路径,也不能在网上下载 这是网上别人封装好了的包,下载好了 ...