如何将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())
答案
有几种选择。
- 将其作为单独的服务运行,以便多个应用程序可以独立使用它。为此,您需要围绕您的机器学习实现创建一个API(它应该公开所需的功能,如培训模型,预测等)并单独部署/托管它。这分离了对Web应用程序和实际机器学习的关注,因此这是我的首选方式,除非整个应用程序很小(如概念证明)。
- 将所有代码保持在一起,包括您的机器学习部分,并将其部署为单个整体应用程序。您需要一些持久的二进制(例如文件)存储来存储经过训练的模型(例如Google云存储),其中有多个应用程序(具有自己的ML程序,可能会有所不同,保持与您训练的模型的兼容性,如果他们想分享它)。如果您关心的是首先处于工作状态(例如概念证明),那么这应该更简单,更快捷。
以上是关于如何将py文件中的机器学习算法集成到django网站?的主要内容,如果未能解决你的问题,请参考以下文章