如何将py文件中的机器学习算法集成到django网站?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将py文件中的机器学习算法集成到django网站?相关的知识,希望对你有一定的参考价值。

我正在使用随机森林算法用python预测大学辍学,算法已经完成,现在我必须使用该文件并能够从网站运行它,我正在使用django但我不知道我是怎么做的可以使它工作,我在视图中导入文件,但它只显示一行,它甚至没有像我在jupyter中运行文件时那样的结构,所以如果有人知道的话我会非常感激。

对不起,如果有点难以理解,英语不是我的第一语言。

这是算法

 import numpy as np
    from sklearn.ensemble import RandomForestClassifier 
    from sklearn import metrics
    import pandas as pd
    from sklearn.feature_selection import SelectKBest

    dataset = pd.read_csv('C:/Users/danni/OneDrive/Documents/Universidad/2018/Tesis/encuestas/Nueva carpeta/Nueva carpeta/SinRanking/2005_2017_SOLO_PRIMERO_Y_SEGUNDO.csv',  delimiter=";")  


    datos2 = dataset['F_Nac']
    i = 0
    a = []
    while i < len(datos2):
        value2 = datos2[i]
        first = value2[6:10]

        year = first
        a_ingreso = dataset['A_Ingreso']
        a.append(a_ingreso[i] - int(year)) 
        i += 1
    dataset['edad_ingreso']=a;



    #calculamos la edad de ingreso a la universidad
    def calcula_dif_years_eg_in(anio,cuando):
        return anio - cuando

    dataset['a_egresado_colegio']=dataset.apply(lambda x: calcula_dif_years_eg_in(x['A_Ingreso'],x['A_Egreso_Colegio']), axis=1);


    dataset = dataset.drop(["F_Nac","A_Ingreso","A_Egreso_Colegio","Via_Ingreso"], axis=1)


    # cargamos las variables predictoras
    predictors = dataset.drop(['Deserto'], axis=1)
    # y estos son los resultados que se obtienen, en el mismo orden
    targets = dataset['Deserto']


    best=SelectKBest(k=10)
    X_new = best.fit_transform(predictors, targets)
    X_new.shape
    selected = best.get_support(indices=True)
    print(predictors.columns[selected])



    #datos desde el 2005 al 2015
    X_train = predictors[0:567] 
    X_test = predictors[568:632] 
    #datos del 2016
    y_train = targets[0:567] 
    y_test = targets[568:632]



    modelo = RandomForestClassifier(
     random_state      = 1,   # semilla inicial de aleatoriedad del algoritmo
     n_estimators      = 5, # cantidad de arboles a crear
     min_samples_split = 0.5,   # cantidad minima de observaciones para dividir un nodo
     min_samples_leaf  = 8,   # observaciones minimas que puede tener una hoja del arbol
     n_jobs            = -1    # tareas en paralelo. para todos los cores disponibles usar -1
     )
    modelo.fit(X_train[predictors.columns[selected]].values, y_train)


    prediccion = modelo.predict(X_test[predictors.columns[selected]].values)

    modelo.score(X_train[predictors.columns[selected]], y_train)


    modelo.score(X_test[predictors.columns[selected]], y_test)



    print(metrics.classification_report(y_true=y_test, y_pred=prediccion))
    print(pd.crosstab(y_test, prediccion, rownames=['REAL'], colnames=['PREDICCION']))


    var_imp = pd.DataFrame({
     'feature':predictors.columns[selected], 
     'v_importance':modelo.feature_importances_.tolist()
     })
    print (var_imp.sort_values(by = 'v_importance', ascending=False))




    #Curvas de aprendizaje
    from sklearn.learning_curve import learning_curve

    train_sizes, train_scores, test_scores = learning_curve(estimator=modelo,
                            X=X_train, y=y_train, 
                            train_sizes=np.linspace(0.1, 1.0, 10), cv=10,
                            n_jobs=-1)

    train_mean = np.mean(train_scores, axis=1)
    train_std = np.std(train_scores, axis=1)
    test_mean = np.mean(test_scores, axis=1)
    test_std = np.std(test_scores, axis=1)


    import matplotlib.pyplot as plt
    import seaborn as sns
    get_ipython().run_line_magic('matplotlib', 'inline')
    sns.set_palette("deep",desat=.6)
    sns.set_context(rc={"figure.figsize":(8,4)})

    # graficando las curvas
    plt.plot(train_sizes, train_mean, color='r', marker='o', markersize=5,
             label='entrenamiento')
    plt.fill_between(train_sizes, train_mean + train_std, 
                     train_mean - train_std, alpha=0.15, color='r')
    plt.plot(train_sizes, test_mean, color='b', linestyle='--', 
             marker='s', markersize=5, label='evaluacion')
    plt.fill_between(train_sizes, test_mean + test_std, 
                     test_mean - test_std, alpha=0.15, color='b')
    plt.grid()
    plt.title('Curva de aprendizaje')
    plt.legend(loc='upper right')
    plt.xlabel('Cant de ejemplos de entrenamiento')
    plt.ylabel('Precision')
    plt.show()



    i = 0
    a = []
    while i < len(X_test):
        a.append(modelo.predict(X_test[predictors.columns[selected]])[i]) 
        i += 1


    print(a)


    X_test['x']=a

    X_test
    print(X_test.groupby('x').size())
答案

有几种选择。

  1. 将其作为单独的服务运行,以便多个应用程序可以独立使用它。为此,您需要围绕您的机器学习实现创建一个API(它应该公开所需的功能,如培训模型,预测等)并单独部署/托管它。这分离了对Web应用程序和实际机器学习的关注,因此这是我的首选方式,除非整个应用程序很小(如概念证明)。
  2. 将所有代码保持在一起,包括您的机器学习部分,并将其部署为单个整体应用程序。您需要一些持久的二进制(例如文件)存储来存储经过训练的模型(例如Google云存储),其中有多个应用程序(具有自己的ML程序,可能会有所不同,保持与您训练的模型的兼容性,如果他们想分享它)。如果您关心的是首先处于工作状态(例如概念证明),那么这应该更简单,更快捷。

以上是关于如何将py文件中的机器学习算法集成到django网站?的主要内容,如果未能解决你的问题,请参考以下文章

机器学习笔记之四Adaboost 算法

机器学习算法--集成学习

美团网基于机器学习方法的POI品类推荐算法

Python机器学习实战决策树与集成学习——集成学习GBDT应用实例

机器学习之集成学习算法

机器学习入门-集成算法(bagging, boosting, stacking)