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

Python 如何将py文件中的机器学习算法集成到django网站?,python,html,django,csv,machine-learning,Python,Html,Django,Csv,Machine Learning,我正在使用随机森林算法用python预测大学辍学学生,该算法已经完成,现在我必须使用该文件并能够从网站上运行它,我使用django,但我不知道如何使其工作,我在视图中导入该文件,但它只显示一行,它甚至没有像我在jupyter中运行文件时那样的结构,所以如果有人知道一些事情,我将非常感激 对不起,如果有点难理解,英语不是我的第一语言 这就是算法 import numpy as np from sklearn.ensemble import RandomForestClassifier

我正在使用随机森林算法用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())

有两种选择

将其作为单独的服务运行,以便多个应用程序可以独立使用它。为此,您需要围绕机器学习实现创建一个API,该API应该公开所需的功能,如训练模型、预测等,并单独部署/托管它。这将您的web应用程序和实际的机器学习分离开来,因此这是我首选的方法,除非整个应用程序像概念验证一样小。 将所有代码放在一起,包括其中的机器学习部分,并将其部署为单个单片应用程序。您将需要一些持久的二进制存储,例如文件存储来存储经过训练的模型,例如Google云存储,其中有多个应用程序具有自己的ML程序,这可能有所不同,但如果他们想要共享,则需要保持与您的训练模型的兼容性。如果您所关心的只是先在工作状态下获得一些东西,比如概念验证,那么这应该更简单、更快。