本章的几个概念:

估计器(estimator) 用于分类、聚类和回归分析
          转换器(transformer):用于数据预处理回来数据转换
          流水线(pipeline): 组合数据挖掘流程, 便于在此使用

1.scikit-learn估计器

数据集下载地址:UCI

加载数据集:

#coding=gbk
#python 数据挖掘入门与实践
#第2章: 使用scikit-learn 估计器分类 #估计器(estimator) 用于分类、聚类和回归分析
#转换器(transformer):用于数据预处理回来数据转换
#流水线(pipeline): 组合数据挖掘流程, 便于在此使用
import numpy as np
import csv
X = np.zeros((351,34), dtype = 'float')
y = np.zeros((351,), dtype = 'int') #原文中dtype 为'float' ,此处应该为 int 类型,其自动将true 转换成 1 ,false转换成 0 #加载数据集
with open(r'D:\datasets\ionosphere.csv','r') as input_file:
reader = csv.reader(input_file)
for i , row in enumerate(reader):
data = [float(datum) for datum in row[:-1]] #将前34个特征保存到x 中
X[i]= data
y[i] = row[-1]=='g' #把字母型转换成数值型
print(X[:5])
print(y[:9])

实现流程的标准化:

#创建训练集和测试集
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state= 14) from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier() #使用KNN 算法
knn.fit(X_train, y_train)
y_predicted = knn.predict(X_test)
accuracy = np.mean(y_predicted == y_test) *100
print('the accuracy is %.1f'%accuracy) # the accuracy is 86.4 #使用交叉验证
from sklearn.model_selection import cross_val_score
scores = cross_val_score(knn, X, y, scoring= 'accuracy')
average_score = np.mean(scores) * 100
print('the average accuracy is %.1f'%average_score+'%') # the average accuracy is 82.3%
#作者say:考虑到还没有进行调参数, 这个结果还是相当不错

设置参数:

#设置参数

#测试一系列的n_neighbors 一系列的值, 进行重复多次试验, 观察参数值带来的结果之间的差异
ave_score =[]
all_score = []
for n_neighbors in range(1,21):
estimator = KNeighborsClassifier(n_neighbors=n_neighbors)
scores = cross_val_score(estimator, X, y, scoring= 'accuracy')
all_score.append(scores)
ave_score.append(np.mean(scores)) print(ave_score) import matplotlib.pyplot as plt
x1 = range(1,21)
plt.plot(x1, ave_score, '-o')
plt.show() #有图知道, 随着 K 值得增大 , 整体的正确率趋势是下降的

2.流水线在预处理中的使用

不同特征的取值范围千差万别, 常见的方法是对不同的特征进行规范化,使他们的特征值落在相同的值域或者是属于某几个确定的类别
一旦解决这个问题, 不同的特征类型对算法的影响将大大降低, 分类的正确率就有大大的提升
sckit-learn 的预处理工具 称为 转换器(Transfomer),它接受原始数据集, 返回的是转换后的数据集。除了,处理数值型的特征还能用于抽取特征

X_broken = np.array(X)
X_broken[:,::2] /=10 #每隔一行, 就把第二个特征的值除以10 knn2 = KNeighborsClassifier()
broken_score = cross_val_score(knn2, X_broken, y, scoring='accuracy')
ave_broken_score = np.mean(broken_score)
print('the broken score accuracy is %.3f'%ave_broken_score) # the broken score accuracy is 0.715 #将特征值转换成 0 到1 之间,以解决问题
#标准预处理:使用MinMaxScalar 类进行规范化处理,规范到0到1 之间 #对X 进行预处理, 有些转换器要求像训练分类器那样先进行训练, 但是MinMaxScalar 不需要, 直接调用 fit_transform 函数,即可以完成训练和转换
from sklearn.preprocessing import MinMaxScaler
X_transform = MinMaxScaler().fit_transform(X_broken) knn2 = KNeighborsClassifier()
transform_scores = cross_val_score(knn2, X_transform, y, scoring='accuracy')
ave_transform_scores = np.mean(transform_scores) * 100
#MinMaxScaler 将特征规范到相同的值域, 这样特征就不会仅仅因为值大二具备更强的区分度
print('the x_transformed average score is %.2f'%ave_transform_scores) #the x_transformed average score is 82.34 #流水线
#流水线的输入为一系列的数据挖掘的步骤, 其中最后一步必须是估计器, 前几部是转换器。
from sklearn.pipeline import Pipeline
scailing_pipeline = Pipeline([('scale', MinMaxScaler()),
('knn', KNeighborsClassifier())])
scores1 = cross_val_score(scailing_pipeline, X_broken, y, scoring= 'accuracy')
pipeline_score = np.mean(scores1) *100
print('the accuracy is %.2f'%pipeline_score+'%') # the accuracy is 82.34% 与上式结果是一样的

使用scikit-learn 估计器分类的更多相关文章

  1. scikit learn 模块 调参 pipeline+girdsearch 数据举例:文档分类 (python代码)

    scikit learn 模块 调参 pipeline+girdsearch 数据举例:文档分类数据集 fetch_20newsgroups #-*- coding: UTF-8 -*- import ...

  2. Scikit Learn: 在python中机器学习

    转自:http://my.oschina.net/u/175377/blog/84420#OSC_h2_23 Scikit Learn: 在python中机器学习 Warning 警告:有些没能理解的 ...

  3. (原创)(四)机器学习笔记之Scikit Learn的Logistic回归初探

    目录 5.3 使用LogisticRegressionCV进行正则化的 Logistic Regression 参数调优 一.Scikit Learn中有关logistics回归函数的介绍 1. 交叉 ...

  4. (原创)(三)机器学习笔记之Scikit Learn的线性回归模型初探

    一.Scikit Learn中使用estimator三部曲 1. 构造estimator 2. 训练模型:fit 3. 利用模型进行预测:predict 二.模型评价 模型训练好后,度量模型拟合效果的 ...

  5. Scikit Learn

    Scikit Learn Scikit-Learn简称sklearn,基于 Python 语言的,简单高效的数据挖掘和数据分析工具,建立在 NumPy,SciPy 和 matplotlib 上.

  6. Query意图分析:记一次完整的机器学习过程(scikit learn library学习笔记)

    所谓学习问题,是指观察由n个样本组成的集合,并根据这些数据来预测未知数据的性质. 学习任务(一个二分类问题): 区分一个普通的互联网检索Query是否具有某个垂直领域的意图.假设现在有一个O2O领域的 ...

  7. 机器学习-scikit learn学习笔记

    scikit-learn官网:http://scikit-learn.org/stable/ 通常情况下,一个学习问题会包含一组学习样本数据,计算机通过对样本数据的学习,尝试对未知数据进行预测. 学习 ...

  8. Linear Regression with Scikit Learn

    Before you read  This is a demo or practice about how to use Simple-Linear-Regression in scikit-lear ...

  9. 集成算法(chapter 7 - Hands on machine learning with scikit learn and tensorflow)

    Voting classifier 多种分类器分别训练,然后分别对输入(新数据)预测/分类,各个分类器的结果视为投票,投出最终结果: 训练: 投票: 为什么三个臭皮匠顶一个诸葛亮.通过大数定律直观地解 ...

随机推荐

  1. 第一章 Spring.Net介绍

    1.1 概述 在Java社区中Spring经历的长时间的考验,已经是一套很成熟稳定的框架.而Spring.Net 的前身是 Java版的Spring.Spring.Net是以Java版的Spring框 ...

  2. SQLServer------如何让标识列重新开始计算

    方法: DBCC CHECKIDENT (表名, RESEED, )

  3. 安装autoit libary失败问题解决

    运行环境:win7-32,python2.7安装遇到的问题:

  4. osgEarth2.8加载矢量数据描边效果

    通过修改osgearth自带的agglite插件,实现矢量描边效果,可以自定义描边的颜色和宽度(单位像素) 测试文件osgearth_features.cpp #include <osg/Not ...

  5. .Net Core 使用EF Core方法

    新建项目后,使用NuGet安装包: Install-Package Microsoft.EntityFrameworkCore Install-Package Microsoft.EntityFram ...

  6. web基础----->模板引擎Velocity的使用(二)

    这里面是关于velocity的一些用法,比较基础的使用.愿你生命中有够多的云翳,来造成一个美丽的黄昏. velocity生成javaBean 一.定义一个简单的bean类 public class C ...

  7. rpm方式安装 gitlab centos7

    一.使用RPM安装 - 推荐 官方推荐的下载地址:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/ Tips 1 : Centos 7使用el7 ...

  8. PHP 的异常处理、错误的抛出及回调函数等面向对象的错误处理方法

    PHP 的异常处理.错误的抛出及回调函数等面向对象的错误处理方法: http://www.jb51.net/article/32498.htm http://www.cnblogs.com/hongf ...

  9. 优雅的go语言--入门篇

    1.特点 1.静态类型,编译型的开源语言 2.脚本华的语法,支持多种编程范式(函数式&面向对象) 3.原生,给力的并发编程的支持 2.优势 1.脚本化的语法 2.静态类型+编译型,程序运行速度 ...

  10. CH1807 Necklace【Hash】【字符串】【最小表示法】

    1807 Necklace 0x18「基本数据结构」练习 背景 有一天,袁☆同学绵了一条价值连城宝石项链,但是,一个严重的问题是,他竟然忘记了项链的主人是谁!在得知此事后,很多人向☆同学发来了很多邮件 ...