《Python机器学习》笔记(三)
使用scikit-learning 实现机器学习分类算法
分类算法的选择
没有免费的午餐理论:没有任何一种分类器可以在所有可能的应用场景下都有良好的表现。
实践证明,只有比较了多种学习算法的性能,才能为特定问题挑选出最合适的模型。这些模型针对不同数量的特征或样本、数据集中噪声的数量,以及类别是否线性可分等问题时,表现各不相同。
总而言之,分类器的性能、计算能力和预测能力,在很大程度上都依赖于用于模型训练的相关数据。训练机器学习算法所涉及的五个主要步骤可概述如下:
1.特征的选择
2.确定性能评价标准
3.选择分类器及其优化算法
4.对模型性能的评估
5.算法的调优
初涉scikit-learn的使用
使用scikit-learn训练感知器
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.cross_validation import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import Perceptron
from sklearn.metrics import accuracy_score
iris=datasets.load_iris()
X=iris.data[:,[,]]
y=iris.target
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3,random_state=)
sc=StandardScaler()
sc.fit(X_train)
X_train_std=sc.transform(X_train)
X_test_std=sc.transform(X_test)
ppn=Perceptron(n_iter=,eta0=0.1,random_state=)
ppn.fit(X_train_std,y_train)
y_pred=ppn.predict(X_test_std)
print('Misclassified samples:%d'%(y_test!=y_pred).sum())
print('Accuracy:%.2f'%accuracy_score(y_test,y_pred))
使用scikit-learn中cross_validation模块中的train_test_split函数,随机将数据矩阵X与类标向量y按照3:7的比例分为测试数据集(45个样本)和训练数据集(105个样本)。
为了优化性能,许多机器学习和优化算法都要求对数据做特征缩放。在此,我们将使用scikit-learn的preprocessing模块中的StandardScaler类对特征进行标准化处理。使用StandardScaler中的fit方法,可以计算训练数据中每个特征的平均值和方差。通过通用transform方法,可以使用前面计算得到的平均值和方差来对训练数据做标准化处理。需注意的是,我们要使用相同的缩放参数分别处理训练和测试数据集,以保证它们的值是彼此相当的。
对于使用scikit-learn的接口训练感知器,其流程与我们在(二)中实现的感知器的流程类似:在加载了linear_model模块中的Perceptron类后,我们实例化一个新的Perceptron对象,并通过fit方法训练模型。此模型中的参数eta0与我们自行实现的感知器中的学习率eta等价,而参数n_iter定义了迭代的次数
使用scikit-learn完成模型的训练后,就可以在测试数据集上使用predict方法进行预测了
在metrics模块中,scikit-learn还实现了许多不同的性能矩阵。accuracy_score(y_test,y_pred)
逻辑斯蒂回归中的类别概率
感知器是机器学习分类算法中优雅易用的一个入门算法,不过其最大的缺点在于:在样本不是完全线性可分的情况下,它永远不会收敛。上一小节中关于分类的任务就是这样的一个例子。直观上,可以把原因归咎于:在每次迭代过程中,总是存在至少一个分类错误的样本,从而导致了权重持续更新。当然,你也可以改变学习速率并增加迭代次数,不过感知器在此类数据集上仍旧永远无法收敛。为了提高分类的效率,我们学习另外一种针对线性二分类别分类问题的简单但更高效的算法:逻辑斯蒂回归。请注意:不要被其名字所迷惑,逻辑斯蒂回归是一个分类模型,而不是回归模型。
sigmoid函数的图
import numpy as np
from sklearn.linear_model import LogisticRegression
def sigmoid(z):
return 1.0/(+np.exp(-z))
z=np.arange(-,,0.1)
phi_z=sigmoid(z)
plt.plot(z,phi_z)
plt.axvline(0.0,color='k')
plt.axhspan(0.0,,facecolor='1.0',alpha=1.0,ls='dotted')
plt.axhline(y=0.5,ls='dotted',color='k')
plt.yticks([0.0,0.5,1.0])
plt.ylim(-0.1,1.1)
plt.xlabel('z')
plt.ylabel('$\phi (z)$')
plt.show()
from sklearn.linear_model import LogisticRegression用来调用逻辑斯蒂回归模型,我们用fit方法训练数据。
使用支持向量机最大化分类间隔
一种强大且广发应用的学习算法是支持向量机(SVM),它可以看作对感知器的扩展。在感知器算法中,我们可以最小化分类误差。而在SVM中,我们的优化目标是最大化分类间隔。此外间隔是指两个分离的超平面(决策边界)间的距离,而最靠近超平面的训练样本称作支持向量。
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import SGDClassifier
from sklearn.svm import SVC
from matplotlib.colors import ListedColormap
def plot_decision_region(X,y,classifier,test_idx=None,resolution=0.02):
markers=('s','x','o','^','v')
colors=('red','blue','lightgreen','gray','cyan')
cmap=ListedColormap(colors[:len(np.unique(y))])
x1_min,x1_max=X[:,].min()-,X[:,].max()+
x2_min,x2_max =X[:, ].min() - , X[:, ].max()+
xx1,xx2=np.meshgrid(np.arange(x1_min,x1_max,resolution),np.arange(x2_min,x2_max,resolution))
Z=classifier.predict(np.array([xx1.ravel(),xx2.ravel()]).T)
Z=Z.reshape(xx1.shape)
plt.contourf(xx1,xx2,Z,alpha=0.4,cmap=cmap)
plt.xlim(xx1.min(),xx1.max())
plt.ylim(xx2.min(),xx2.max()) X_test,y_test=X[test_idx,:],y[test_idx]
for idx,cl in enumerate(np.unique(y)):
plt.scatter(x=X[y==cl,],y=X[y==cl,],alpha=0.8,c=cmap(idx),marker=markers[idx],label=cl) if test_idx:
X_test,y_test=X[test_idx,:],y[test_idx]
plt.scatter(X_test[:.],X_test[:,],c='',s=,label='test set') ppn=SGDClassifier(loss='perceptron')
lr=SGDClassifier(loss='log')
svm=SGDClassifier(loss='hinge')
np.random.seed()
X_xor=np.random.randn(,)
y_xor=np.logical_xor(X_xor[:,]>,X_xor[:,]>)
y_xor=np.where(y_xor,,-)
plt.scatter(X_xor[y_xor==,],X_xor[y_xor==,],c='b',marker='x',label='')
plt.scatter(X_xor[y_xor==-,],X_xor[y_xor==-,],c='r',marker='s',label='-1')
plt.ylim(-,)
plt.legend()
plt.show()
svm=SVC(kernel='rbf',random_state=,gamma=0.1,C=)
svm.fit(X_xor,y_xor)
plot_decision_region(X_xor,y_xor,classifier=svm)
plt.legend(loc='upper left')
plt.show()
《Python机器学习》笔记(三)的更多相关文章
- 基于C#程序设计语言的三种组合算法
目录 基于C#程序设计语言的三种组合算法 1. 总体思路 1.1 前言 1.2 算法思路 1.3 算法需要注意的点 2. 三种组合算法 2.1 普通组合算法 2.2 与自身进行组合的组合算法 2.3 ...
- python程序设计语言笔记 第一部分 程序设计基础
1.1.1中央处理器(CPU) cpu是计算机的大脑,它从内存中获取指令然后执行这些指令,CPU通常由控制单元和逻辑单元组成. 控制单元用来控制和协调除cpu之外的其他组件的动作. 算数单元用来完成数 ...
- C程序设计语言笔记-第一章
The C Programming language notes 一 基础变量类型.运算符和判断循环 char 字符型 character ...
- 《javascript高级程序设计》笔记三
第三章 基本概念 任何语言的核心必然会描述这门语言最基本的工作原理.这部分内容对我们来说,读起来很乏味,甚至会产生困意,但这部分内容却是重要的!我有幸拜读<JavaScript高级程序设计> ...
- [C程序设计语言]第三部分
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- 精读《javascript高级程序设计》笔记三——面向对象的程序设计
重点来了,我认为这一章值得好好地反复地看.看第一遍 还是懵懵懂懂,现在看第二遍,终于能看出点意思了. 创建对象 工厂模式 function createPerson(name, age, job){ ...
- 《程序设计语言——实践之路(英文第三版)》【PDF】下载
<程序设计语言--实践之路(英文第三版)>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382234 内容简介 <程序设计语 ...
- 北京大学Cousera学习笔记--6-计算导论与C语言基础--计算机的基本原理-认识程序设计语言 如何学习
1.是一门高级程序语言 低级语言-机器语言(二进制) 汇编语言-load add save mult 高级语言:有利于人们编写理解 2.C语言的规范定义非常的宽泛 1.long型数据长度不短于int型 ...
- C语言程序设计I—第三周教学
由于本课程是从教学周的第二周开始上课,所以第二次授课是发生在第三周,为了让PTA.云班课和博客能统一,所以将教学周作为随笔的标题.本周由于处理外聘教师随意退课等事情,总结有些延后了. 第三周教学安排 ...
- Go语言学习笔记三: 常量
Go语言学习笔记三: 常量 定义常量 常量就是在声明后不能再修改的量. const x int = 100 const y string = "abc" const z = &qu ...
随机推荐
- C/C++中,空数组、空类、类中空数组的解析及其作用
转自:http://blog.sina.com.cn/s/blog_93b45b0f01015s95.html 我们经常会遇到这些问题: (1)C++中定义一个空类,他们它的大小(sizeof) 为多 ...
- Atitit。监听键盘上下左右方向键事件java js jquery c#.net
Atitit.监听键盘上下左右方向键事件java js jquery c#.net 1. Keyword1 2. 通用的实现流程1 3. Js的实现1 3.1. Bind control ,eve ...
- Atitit.数据索引 的种类以及原理实现机制 索引常用的存储结构
Atitit.数据索引 的种类以及原理实现机制 索引常用的存储结构 1. 索引的分类1 1.1. 索引的类型 按查找方式分,两种,分块索引 vs编号索引1 1.2. 按索引与数据的查找顺序可分为 正 ...
- 用VMware 8安装Ubuntu 12.04具体过程(图解)
图解演示环境版本号: 本机系统: WIN7 虚拟机:VMware Workstation 8 (英文版) 安装目标:Ubuntu Desktop 12.04 LTS (请点击这里)先下载好iso镜像 ...
- Mockito - Wanted but not invoked: Actually, there were zero interactions with this mock
要测试的类:IndexController.java 代码: @Mock private TemplateWrapper templateWrapper = spy(new TemplateWrapp ...
- socket心跳检测
一.什么是心跳检测 判断对方(设备,进程或其它网元)是否正常动行,一般采用定时发送简单的通讯包,如果在指定时间段内未收到对方响应,则判断对方已经当掉.用于检测TCP的异常断开. 基本原因是服务器端不能 ...
- mysql存储引擎的种类与差别(innodb与myisam)
查找数据库的存数引擎: show engines show variables like '%storage_engine%' 更改数据库的引擎更改配置文件/etc/my.cnf 改动default- ...
- python第四周迭代器生成器序列化面向过程递归
第一节装饰器复习和知识储备------------ 第一节装饰器复习和知识储备------------ def wrapper(*args,**kwargs): index(*args,**kwa ...
- HTTPS请求 SSL证书验证
import urllib2 url = "https://www.12306.cn/mormhweb/" headers = {"User-Agent": & ...
- 同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式
1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式: 同步/异步主要针对C端: 同步: ...