Python数据挖掘入门与实践(二)——用scikit-learn估计器分类

来源:互联网 发布:青岛java招聘 编辑:程序博客网 时间:2024/05/19 07:42

几个概念:

估计器(Estimator):用于分类、聚类和回归分析;转换器(Transformer):用于数据预处理和数据转换;流水线(Pipeline):组合数据挖掘流程,便于再次使用。

1、scikit-learn估计器:

估计器用于分类任务,它主要包括以下两个函数:

fit():训练算法,设置内部参数。该函数接收训练集及其类别两个参数。

predict():参数为测试集。预测测试集类别,并返回一个包含测试集各条数据类别的数组。

大多数scikit-learn估计器接收和输出的数据格式均为numpy数组或类似格式。scikit-learn提供了大量估计器,其中有支持向量机(SVM)、随机森林、神经网络等。

a、近邻算法

为了对新个体进行分类,它查找训练集,找到与新个体最相似的那些个体,看看这些个体大多属于哪个类别,就把新个体分到哪个类别。近邻算法几乎可以对任何数据集进行分类,但是要计算数据集中每两个个体之间的距离,计算量很大;在特征取离散的数据集上表现很差。遇到这种情况,应该考虑使用其他算法。

b、距离度量

距离是数据挖掘的核心概念之一。我们往往需要知道两个个体之间的距离是多少。更进一步说,我们还得能够解决一对个体相对另一个个体是否更相近等问题。这类问题的解决方法,将直接影响分类结果。

欧氏距离确实很直观,但是如果某些特征比其他特征取值大很多,精确度就会比较差。此外,如果很多特征值为0,也就是所谓的稀疏矩阵,结果也不准确。这时可以用其他距离度量方法,常用的有曼哈顿距离和余弦距离。曼哈顿距离为两个特征在标准坐标系中绝对轴距之和。余弦距离更适合解决异常值和数据稀疏问题,余弦距离指的是特征向量夹角的余弦值。

近邻算法机器学习实例:

测试数据集来自:http://archive.ics.uci.edu/ml/datasets/Ionosphere

import numpy as np
import csv
from os.path import os


data_filename=os.path.join("..\data","ionosphere.data.csv")
X=np.zeros((351,34),dtype='float')
y=np.zeros((351,),dtype='bool')
with open(data_filename,'r') as input_file:
    reader=csv.reader(input_file)
    for i,row in enumerate(reader):
        data=[float(datum) for datum in row[:-1]]
        X[i]=data
        y[i]=row[-1]=='g'
        
from sklearn.cross_validation import train_test_split


X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.25,random_state=14)


from sklearn.neighbors import KNeighborsClassifier


estimator=KNeighborsClassifier()
estimator.fit(X_train,y_train)


y_predicted=estimator.predict(X_test)
accuracy=np.mean(y_test==y_predicted)*100
print("The accuray is{0:.1f}%".format(accuracy))

阅读全文
0 0
原创粉丝点击