sklearn 学习教程01

本文涉及到

1. 模型持久化的两种方式

2. 读入数据时对dtype进行转换

3. 再次训练和更新参数

4. 多分类和多标签拟合,如何将标签转换成二维数组等



#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 18/3/27 上午11:48
# @Author  : cicada@hole
# @File    : ModueChooser.py
# @Desc    : 
# @Link    :



# 5月15日 重新学习

# 1. module持久化  Python 的内置持久化模块(即 pickle )将模型保存

from sklearn import svm
from sklearn import  datasets
import pickle
def modulePersistence():
    clf = svm.SVC()
    iris = datasets.load_iris()
    X, y = iris.data, iris.target

    clf.fit(X, y)

    # --- 使用 pickle持久化
    s = pickle.dumps(clf) # 将模型持久化
    clf2 = pickle.loads(s)
    print(clf2.predict(X[0:1]),y[0])


    # --- 使用joblib持久化到硬盘
    from sklearn.externals import joblib
    joblib.dump(clf,'filename.pkl') # 持久化到模型
    clf = joblib.load('filename.pkl')
    print(clf)


'''
读数据时类型转换
'''
import numpy as np
from sklearn import random_projection

def changeType():
    rng = np.random.RandomState(0)
    X = rng.rand(10,2000)
    X = np.array(X, dtype='float32')
    print(X.dtype)  # 原来的type 一般都会被转换为float 64

    transformer = random_projection.GaussianRandomProjection()
    X_new = transformer.fit_transform(X)
    print(X_new.dtype)

'''
再次训练和更新参数
'''
import numpy as np
from sklearn.svm import SVC
def updateParams():
    rng = np.random.RandomState(0)
    X = rng.rand(100,10) # 100行10列
    y = rng.binomial(1, 0.5, 100) # 二项分布, n,p size
    X_test = rng.rand(5,10)
    # print(X,y,X_test)

    clf = SVC()
    clf.set_params(kernel='linear').fit(X,y)
    print(clf.predict(X_test))

    clf.set_params(kernel='rbf').fit(X, y)
    print(clf.predict(X_test))

'''
多分类与多标签拟合
'''
def multiClf():
    from sklearn.svm import SVC
    from sklearn.multiclass import OneVsRestClassifier
    from sklearn.preprocessing import LabelBinarizer

    X = [[1, 2], [2, 4], [4, 5], [3, 2], [3, 1]]
    y = [0, 0, 1, 1, 2]
    clf = OneVsRestClassifier(estimator=SVC(random_state=0))
    print(clf.fit(X,y).predict(X))

    # 标签二值化可以转换为一个二维数组来表示,比如 0,1,2 可以转换为[1,0,0][0,1,0][0,0,1]
    y = LabelBinarizer().fit_transform(y)
    print(clf.fit(X, y).predict(X))


if __name__ == '__main__':
    # modulePersistence()  # module持久化,pickle和joblib两种方式
    # changeType()  # 对读入数据集的dtype进行改变
    # updateParams() # 更新参数,然后继续训练

    multiClf() # 多分类和多标签拟合,将标签转换成二维数组等






猜你喜欢

转载自blog.csdn.net/muyimo/article/details/80324407
今日推荐