• sklearn学习小结


    机器学习的一般流程:

         1、获取数据

         2、数据预处理

         3、数据集分拆

         4、搭建模型

         5、模型评估

         6、模型保存

         7、模型优化

    接下来,以Sklearn为例,一一介绍。

    1、获取数据

    1.1、导入数据集:

              要想使用sklearn中数据集,必须导入datasets模块:

              from sklearn import datasets

              iris = datasets.load_iris()

              x=iris.data

              y=iris.target

    1.2、创建数据集:

             相关接口如:make_blobs,make_classification,make_regression,make_moons

             from sklearn.datasets.samples_generator import make_classification

             x,y = make_classificatoin(n_samples=6,n_features=5,n_informative=2,n_redundant=2,

               n_classes=2,n_cluster_per_class=2,scale=1.0,random_state=20)

    2、数据预处理:

        数据预处理是机器学习中不可或缺的一环,能使数据更加有效的被模型训练。

        from sklearn import preprocessing

    2.1、数据归一化

         为了提高数据训练的速度和效率,需要在训练前对数据进行归一化。

        train_data=[[1.4,2],[2.2,4],[4,5],[6,]]

         scaler = preprocessing.StandardScaler().fit(train_data) #基于均值和方差的标准化

         scaler = transform(train_data)

         scaler = preprocessing.MinMaxScaler(feature_range=(0,1)).fit(train_data) #将特征值归一化到一个固定范围

    2.2正则化

         正则化的作用是防止过拟合,方法是:先求出样本范数,然后对样本所有元素除以该范数,使用每个样本的范数都为1.

          x_norm = preprocessing.normalize(x,norm='l2')

    2.3 Onehot独热编码

          onehot编码是对离散特征值的一种编码方式。

          onehot_encoder= preprocessing.OneHotEncoder().fit(data)

          onehot_encoder.transform(data).toarray()

    3、数据集分拆

          通常在训练前会把数据集分拆成训练集和验证集, 以便我们在训练完模型后可以对模型进行验证。

          from sklearn.mode_selection import train_test_split

          train_x,test_x,train_y,test_y = train_test_split(x,y,test_size=0.3,random_state=42)

    4、搭建模型

         根据业务场景搜集数据,并决定采用什么样的模型。

    4.1、线性回归

         y=ax+b  :a is model.coef_,b is model.intercept_

         from sklearn.linear_model import LinearRegression

         model = LinearRegression(fit_intercept=True,normalize=False,copy_x=True,n_jobs=1)

    4.2、逻辑回归

         from sklearn.linear_model import LogisticRegression

         model = LogisticRegression(penalty='l2',dual=False,tol=0.0001,C=1.0,fit_intercept=True,intercept_scaling=1,class_weight=None,random_state  =None,solver='liblinear',max_iter=100,multi_class='ovr',verbose=0,warm_start=False,n_jobs=1)

    4.3 K近邻算法KNN

          from sklearn import neighbors

          model=neighbors.KNeighborsClassifier(n_neighbors=5,n_jobs=1) 

          model= neighbors.KNeighborsRegression(n_neighbors=5,n_jobs=1) 

    4.4 MLP(多层感知机)

          from sklearn.neural_network import MLPClassifier

          model = MLPClassifier(activation='relu',solver='adam',alpha=0.0001)

    5、模型评估

    5.1、交叉验证

          from sklearn.model_selection import cross_val_score

          cross_val_score(model,x,y=None,scoring=None,cv=None,n_job2=1)

    5.2、检验曲线

          from sklearn.model_selection import validation_curve

          train_score,test_score = validation_curve(model,x,y,param_name,param_range,cv=None,scoring=None,n_jobs=1)

    6、保存模型

          我们可以将训练完的模型保存起来,为后续使用作准备。

    6.1、保存为pickle

          import pickle 

          with open('model.pickle','wb') as f: #保存模型

                pickle.dump(model,f)

          with open('model.pickle','rb') as f: #加载模型

                model = pickle.load(f)

          model.predict(test_x)

    6.2、joblib

          from sklearn.externals import joblib

          joblib.dump(model,'model.pickle')  #保存模型

          model= joblib.load('model.pickle') #加载模型

     7、模型优化

     7.1欠拟合

          模型训练:

          #数据集准备

          from sklearn.datasets import load_boston  

          boston=load_boston()

          x=boston.data

          y=boston.target

          #数据集分拆

          from sklearn.model_selection import train_test_split

          x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.2,random_state=3)

          #模型训练与评估

          import time

          from sklearn.linear_model import LinearRegression

          model=LinearRegression()

          start=time.clock()

          model.fit(x_train,y_train)

          train_score=model.score(x_train,y_train)

          cv_score=model.score(x_test,y_test)

          print('elapse:{0:.6f} train_score:{1:0.6f} cv_score:{2:.6f}'.format(time.clock()-start,train_score,cv_score))

          模型训练后,得分如下:

          elapse:0.06375 train_score:0.723941  cv_score:0.794958

          精度有些偏低,属于欠拟合现象。

          优化方法如下:

          from sklearn.linear_model import LinearRegression

          from sklearn.preprocessing import PolynomialFeatures

          from sklearn.pipeline import Pipeline

          def polynomial_model(degree=1):

              polynomial_features=PolynomialFeatures(degree=degree,include_bias=False)

              linear_regression = LinearRegression(normalize=True)

              pipeline=Pipeline(['polynomial_features',polynomial_features),('linear_regression',linear_regression)])

              return pipeline

           model = polynomial_model(degree=2)

           start=time.clock()

           model.fit(x_train,y_train)

           train_score=model.score(x_train,y_train)

           cv_score=model.score(x_test,y_test)

           print('elapse:{0:.6f} train_score:{1:0.6f} cv_score:{2:.6f}'.format(time.clock()-start,train_score,cv_score))

           模型训练后,新的得分如下:

          elapse:0.009711 train_score:0.930547  cv_score:0.860465

          改为三阶多项式后:

          elapse:0.178630 train_score:1.000000  cv_score:-105.517015

          训练样本分数达到了1,而测试样本的分数却是负数,说明过拟合了。

          

  • 相关阅读:
    The 2019 ICPC Asia Shanghai Regional Contest H Tree Partition k、Color Graph
    回溯法、子集树、排列树、满m叉树
    顺时针打印矩阵
    单调递增的数字
    nodejs
    nodejs + express + mangodb 项目搭建
    nodejs + express 项目初始化
    星星评分功能(带小数点的那种,5颗星,10分制)
    easyui 增加删除toolbar 显示异常问题
    sql 外键级联,触发器防删
  • 原文地址:https://www.cnblogs.com/jimchen1218/p/11429726.html
Copyright © 2020-2023  润新知