使用scikit-learn做基本机器学习

来源:互联网 发布:中国禁书知乎 编辑:程序博客网 时间:2024/05/21 14:55

安装的工具包

sklearn: sudo pip install sklearn
numpy: sudo pip install numpy
scipy: sudo pip install scipy
matplotlib : sudo pip install matplotlib

sklearn的官网教程

http://scikit-learn.org/stable

机器学习基本概念

机器学习有三个基本的要素,分别是:输入空间, 特征空间与输出空间. 输入空间与输出空间分别表示的是输入与输出的所有可能取值的集合. 由输入空间到输出空间的映射过程, 就是机器学习的任务.然而, 输入空间往往存在数据的冗余, 稀疏, 不平衡分布等情况, 若直接将输入空间作为机器学习模型的输入, 很容易造成学习过程出现较大的偏差. 因此, 需要对输入空间做进一步的数据预处理, 从而构建特征空间.

数据预处理

数据预处理中, 一种比较典型的方法为数据中心化(standardization) . 数据中心化的目的是将数据中每一个特征都服从正态分布, 这样即可以保持特征内数据之间的差异在[-1,1] , 也可以减低特征之间的分布差异. 数据中心化的具体思路是将每一项特征内的数据分布看成独立的标准正态分布, 通过求解均值与分差, 将每一项数据映射为[-1,1]的正态数据.
具体的代码如下:

# coding=utf-8from sklearn import preprocessingimport numpy as np# 原始输入空间X = np.array([[1.,-1.,2.],              [2.,0.,0.],              [0.,1.,-1.]])# 数据中心化scaler = preprocessing.StandardScaler().fit(X)# 构建特征空间features = scaler.transform(X)print features

常见的机器学习模型

KNN分类

#coding=utf-8from sklearn import neighborsfrom sklearn.datasets import load_irisn_neighbors = 5  # 最近邻的个数# 读取数据集iris = load_iris()features = iris.data[:, :2]  # 特征矩阵target = iris.target  # 目标属性# 构建分类器clf = neighbors.KNeighborsClassifier(n_neighbors=n_neighbors)clf.fit(features, target)# 预测分类结果pred = clf.predict(features)print pred

SVM分类

# coding=utf-8from sklearn import svm# 训练样本的特征空间X = [[0,1],[0,2],[0,3],[1,0],[2,0],[3,0]]# 训练样本的目标属性y = [0,0,0,1,1,1]# 构建SVM分类器, 将probability设为true,可以计算每个样本到各个类别的概率clf = svm.SVC(probability=True)# SVM分类器训练样本clf.fit(X,y)# 测试样本test = [[2.5,2.5],[2.5,0]]# 用分类器预测测试样本, 计算每个样本到各个类别的概率result = clf.predict_proba(test)print result

关于sklearn读取libsvm文件

## 读取数据from sklearn.datasets import load_svmlight_filefilename = "data/labelAttributes.txt"data = load_svmlight_file(filename)X, y = data[0], data[1]# X为输入空间, y为输出空间

关于训练模型的保存与加载

需要导入joblib

# coding=utf-8from sklearn.neural_network import MLPClassifierfrom sklearn.externals import joblibimport os# 模型保存的文件夹路径os.chdir("/home/quincy/model_save")# 训练模型X = [[0., 0.], [1., 1.],[2.,2.]]y = [0,1,2]clf = MLPClassifier(solver='lbfgs', alpha=1e-5, hidden_layer_sizes=(5,3), random_state=1)clf.fit(X,y)# 将训练好的模型保存到train_model.m中joblib.dump(clf, "train_model.m")# 模型的加载clf = joblib.load("train_model.m")test = [[2., 2.],[1., 2.]]result = clf.predict_proba(test)print result
阅读全文
0 0
原创粉丝点击