Machine learning—Sklearn

Machine learning—Sklearn

一、简介

SciKit learn的简称是SKlearn,是一个python库,专门用于机器学习的模块。

官网:http://scikit-learn.org/stable/#

参考:https://morvanzhou.github.io/tutorials/machine-learning/sklearn/

GitHub:https://github.com/xiezhiepng/Sklearn

二、安装

pip install scikit-learn==你需要的版本号

三、sklearn知识图谱

由上图可知,算法有四类:分类,回归,聚类,降维。其中分类和回归是监督式学习,即每个数据对应一个 label。 聚类是非监督式学习,即没有 label。 另外一类是 降维,当数据集有很多很多属性的时候,可以通过降维算法把属性归纳起来。

四、KNN classifier(lris花分类)

#导入模块

import numpy as np

from sklearn import datasets

#1.9版本前用from sklearn.cross_validation import train_test_split

#1.9之后使用:

from sklearn.model_selection import train_test_split

from sklearn.neighbors import KNeighborsClassifier

 

#从sklearn。datasets中导入iris花的数据

iris = datasets.load_iris()

iris_X = iris.data

iris_Y = iris.target

print(iris_X[:2,:])#花蕾的半径数据

print(iris_Y)#花的种类

#将iris data分成train和test数据

#split---将数据打乱

#把数据集分为训练集和测试集,其中 test_size=0.3,即测试集占总数据的 30%

X_train,X_test,y_train,y_test = train_test_split(iris_X,iris_Y,test_size=0.3)

# print(y_train)

#knn分类 .fit()分类操作

#定义模块方式 KNeighborsClassifier(), 用 fit 来训练 training data

knn = KNeighborsClassifier()

knn.fit(X_train,y_train)

#使用knn.predict预测X_test,并将预测结果打印出来

print(knn.predict(X_test))#预测值

print(y_test)#真实值

五、datasets

1、example:Linear Regression

#导入datasets包

from sklearn import datasets

from sklearn.linear_model import LinearRegression

 

#创建数据

#加载数据形式:datasets.load_boston() ,对x,y赋值

loaded_data = datasets.load_boston()

data_X = loaded_data.data

data_Y = loaded_data.target

#用默认值去建立 model

model = LinearRegression()

#train model

model.fit(data_X,data_Y)

#打印预测值

print(model.predict(data_X[:4,:]))#预测前四个数据

print(data_Y[:4])#与真实数据对比

2、创建虚拟数据

import matplotlib.pyplot as plt

#用函数来建立 100 个 sample,有一个 feature,和一个 target。

X,y = datasets.make_regression(n_samples=100,n_features=1,n_targets=1,noise=10)

#用 scatter 的形式来输出结果

plt.scatter(X,y)

plt.show()

六、sklearn常用属性与功能

1、导入包、数据,模型方法

from sklearn import datasets

from sklearn.linear_model import LinearRegression

 

loaded_data = datasets.load_boston()

data_X = loaded_data.data

data_Y = loaded_data.target

 

model = LinearRegression()

2、训练和预测

model.fit(data_X,data_Y)

 

print(model.predict(data_X[:4,:]))#预测前四个数据

3、参数和分数

#model常用的属性和功能

print(model.coef_)#y=0.1x + 0.3#输出模型的斜率

print(model.intercept_)#输出模型的截距(与y轴的交点)

print(model.get_params())#取出之前定义的参数

#model打分,输出精确度

print(model.score(data_X,data_Y))#R^2 coefficient of determination

七、正规化 Normalization

由于资料的偏差与跨度会影响机器学习的成效,因此正规化(标准化)数据可以提升机器学习的成效。

# 1、标准化数据模块

from sklearn import preprocessing

import numpy as np

#建立array

a = np.array([[10, 2.7, 3.6],

                     [-100, 5, -2],

                     [120, 20, 40]], dtype=np.float64)

#将normalized后的a打印出来

print(preprocessing.scale(a))

输出结果

[[  10.     2.7    3.6]

 [-100.     5.    -2. ]

 [ 120.    20.    40. ]]

[[ 0.         -0.85170713 -0.55138018]

 [-1.22474487 -0.55187146 -0.852133  ]

 [ 1.22474487  1.40357859  1.40351318]]

2、数据标准化与不进行normalized的对比

#(1)加载模块

# 标准化数据模块

from sklearn import preprocessing

import numpy as np

# 将资料分割成train与test的模块

from sklearn.model_selection import train_test_split

# 生成适合做classification资料的模块

from sklearn.datasets.samples_generator import make_classification

# Support Vector Machine中的Support Vector Classifier

from sklearn.svm import SVC

# 可视化数据的模块

import matplotlib.pyplot as plt

(2)生成做classification数据

#生成具有2种属性的300笔数据

X, y = make_classification(n_samples=300, n_features=2 , n_redundant=0, n_informative=2, random_state=22, n_clusters_per_class=1, scale=100)

#可视化数据

plt.scatter(X[:, 0], X[:, 1], c=y)

plt.show()

(3)进行数据标准化

X = preprocessing.scale(X)    # normalization step

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.3)

clf = SVC()

clf.fit(X_train, y_train)

print(clf.score(X_test, y_test))

#准确率为0.9,不添加准确率只有0.477777777778

八、交叉验证

1、model交叉验证法

from sklearn.cross_validation import cross_val_score # K折交叉验证模块

 

#使用K折交叉验证模块

scores = cross_val_score(knn, X, y, cv=5, scoring='accuracy')

 

#将5次的预测准确率打印出

print(scores)

# [ 0.96666667  1.          0.93333333  0.96666667  1.        ]

 

#将5次的预测准确平均率打印出

print(scores.mean())

# 0.973333333333

2、Learning curve 检视过拟合

#加载对应模块

from sklearn.learning_curve import learning_curve #学习曲线模块

from sklearn.datasets import load_digits #digits数据集

from sklearn.svm import SVC #Support Vector Classifier

import matplotlib.pyplot as plt #可视化模块

import numpy as np

#加载digits数据集,其包含的是手写体的数字,从0到9。数据集总共有1797个样本,每个样本由64个特征组成, 分别为其手写体对应的8×8像素表示,每个特征取值0~16。

digits = load_digits()

X = digits.data

y = digits.target

观察样本由小到大的学习曲线变化, 采用K折交叉验证 cv=10, 选择平均方差检视模型效能 scoring='mean_squared_error', 样本由小到大分成5轮检视学习曲线(10%, 25%, 50%, 75%, 100%):

train_sizes, train_loss, test_loss = learning_curve(

    SVC(gamma=0.001), X, y, cv=10, scoring='mean_squared_error',

    train_sizes=[0.1, 0.25, 0.5, 0.75, 1])

#平均每一轮所得到的平均方差(共5轮,分别为样本10%、25%、50%、75%、100%)

train_loss_mean = -np.mean(train_loss, axis=1)

test_loss_mean = -np.mean(test_loss, axis=1)

#可视化图形

plt.plot(train_sizes, train_loss_mean, 'o-', color="r",

         label="Training")

plt.plot(train_sizes, test_loss_mean, 'o-', color="g",

        label="Cross-validation")

 

plt.xlabel("Training examples")

plt.ylabel("Loss")

plt.legend(loc="best")

plt.show()

3、Cross-validation

上节我们用到了sklearn.learning_curve当中的另外一种, 叫做validation_curve,用这一种曲线我们就能更加直观看出改变模型中的参数的时候有没有过拟合(overfitting)的问题了. 这也是可以让我们更好的选择参数的方法.使用上一次的例子来验证SVC中的一个参数 gamma 在什么范围内能使 model 产生好的结果. 以及过拟合和 gamma 取值的关系.

from sklearn.learning_curve import validation_curve #validation_curve模块

from sklearn.datasets import load_digits

from sklearn.svm import SVC

import matplotlib.pyplot as plt

import numpy as np

 

#digits数据集

digits = load_digits()

X = digits.data

y = digits.target

 

#建立参数测试集

param_range = np.logspace(-6, -2.3, 5)

 

#使用validation_curve快速找出参数对模型的影响

train_loss, test_loss = validation_curve(

    SVC(), X, y, param_name='gamma', param_range=param_range, cv=10, scoring='mean_squared_error')

 

#平均每一轮的平均方差

train_loss_mean = -np.mean(train_loss, axis=1)

test_loss_mean = -np.mean(test_loss, axis=1)

 

#可视化图形

plt.plot(param_range, train_loss_mean, 'o-', color="r",

         label="Training")

plt.plot(param_range, test_loss_mean, 'o-', color="g",

        label="Cross-validation")

 

plt.xlabel("gamma")

plt.ylabel("Loss")

plt.legend(loc="best")

plt.show()

九、save和load

1、使用pickle来保存

#建立与训练一个SVC Model

from sklearn import svm

from sklearn import datasets

 

clf = svm.SVC()

iris = datasets.load_iris()

X, y = iris.data, iris.target

clf.fit(X,y)

 

#pickle保存

import pickle #pickle模块

#保存Model(注:save文件夹要预先建立,否则会报错)

with open('save/clf.pickle', 'wb') as f:

    pickle.dump(clf, f)

#读取Model

with open('save/clf.pickle', 'rb') as f:

    clf2 = pickle.load(f)

    #测试读取后的Model

    print(clf2.predict(X[0:1]))

2、使用joblib保存

from sklearn.externals import joblib #jbolib模块

#保存Model(注:save文件夹要预先建立,否则会报错)

joblib.dump(clf, 'save/clf.pkl')

#读取Model

clf3 = joblib.load('save/clf.pkl')

#测试读取后的Model

print(clf3.predict(X[0:1]))

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值