Untitled

From Perl Hornbill, 2 Months ago, written in Plain Text, viewed 76 times.
URL http://codebin.org/view/bc7c6412 Embed
Download Paste or View Raw
  1. #библиотеки
  2. import pandas as pd
  3. from sklearn.metrics import mean_absolute_error
  4. import matplotlib.pyplot as plt
  5. import numpy as np
  6. from sklearn.pipeline import make_pipeline
  7. from sklearn.preprocessing import StandardScaler
  8. from sklearn.ensemble import RandomForestRegressor
  9. from sklearn.tree import DecisionTreeRegressor
  10. from sklearn.model_selection import GridSearchCV
  11. from sklearn.metrics import make_scorer
  12. from sklearn.dummy import DummyRegressor
  13.  
  14. #загружаем данные
  15. data_train = pd.read_csv('/datasets/gold_industry_train.csv')
  16. data_test = pd.read_csv('/datasets/gold_industry_test.csv')
  17. data_full = pd.read_csv('/datasets/gold_industry_full.csv')
  18.  
  19. data_train.info()
  20. data_test.info()
  21. data_full.info()
  22.  
  23. #проверка на наличие дубликатов
  24. data_train.duplicated().sum()
  25. data_test.duplicated().sum()
  26. data_full.duplicated().sum()
  27.  
  28. data_train.isna().mean()
  29. data_test.isna().mean()
  30.  
  31. #Проверьте, что эффективность обогащения рассчитана правильно
  32. concentrate_au = data_train['rougher.output.concentrate_au']
  33. input_feed_au = data_train['rougher.input.feed_au']
  34. output_tail_au = data_train['rougher.output.tail_au']
  35. output_recovery = data_train['rougher.output.recovery']
  36. recovery = (concentrate_au * (input_feed_au - output_tail_au) / input_feed_au
  37.                         / (concentrate_au - output_tail_au) * 100)
  38. print('Эффективность обогащения', recovery)
  39. print('Абсолютная средняя ошибка (MAE) =', mean_absolute_error(output_recovery, recovery))
  40.  
  41. #удаляем пропуски
  42. b_data_train = data_train.dropna()
  43. b_data_train.isna().mean()
  44.  
  45. #Проведите предобработку данных.
  46. data_test.merge(data_train, how='left', indicator=True) \
  47.           .query("_merge == 'left_only'") \
  48.           .drop('_merge', axis=1)[data_test.columns].columns
  49.  
  50. plt.figure(figsize=[10,8])
  51.  
  52. plt.hist(b_data_train['rougher.output.recovery'], bins=90)
  53. plt.xlim([0, 100])
  54. plt.ylim([0, 800])
  55. plt.xlabel("Эффективность обогащения чернового концентрата ")
  56. plt.ylabel("Количество результатов")
  57.  
  58. plt.title("ЭффективностЬ обогащения")
  59. plt.show()
  60. plt.figure(figsize=[10,8])
  61.  
  62. plt.hist(b_data_train['rougher.output.concentrate_au'], bins=100)
  63. plt.xlim([0, 100])
  64. plt.ylim([0, 800])
  65. plt.xlabel("Эффективность обогащения чернового концентрата ")
  66. plt.ylabel("Количество результатов")
  67.  
  68. plt.title("Доля золота в концентрате до очистки")
  69. plt.show()
  70.  
  71. #удаляем нулевые значения не имеющие смылса
  72. b_data_train = b_data_train.drop(b_data_train[b_data_train['rougher.output.recovery'] == 0].index)
  73. b_data_train = b_data_train.drop(b_data_train[b_data_train['final.output.recovery'] == 0].index)
  74. b_data_train.info()
  75.  
  76. #ЗОЛОТО
  77. plt.figure(figsize=[15,10])
  78.  
  79. plt.hist(b_data_train['final.output.concentrate_au'], bins=100, label = 'final', alpha=.5)
  80. plt.hist(b_data_train['primary_cleaner.output.concentrate_au'], bins=100, label = 'primary_cleaner', alpha=.5)
  81. plt.hist(b_data_train['rougher.output.concentrate_au'], bins=100, label = 'rougher.output', alpha=.5)
  82. plt.hist(b_data_train['rougher.input.feed_au'], bins=100, label = 'rougher.input', alpha=.5)
  83.  
  84. plt.xlim([0, 100])
  85. plt.ylim([0, 1200])
  86.  
  87. plt.xlabel("Концентрация золота на выходе этапов")
  88. plt.ylabel("Количество результатов")
  89.  
  90. plt.legend()
  91.  
  92. plt.title("Гистограмма распределения концентрации золота")
  93. plt.show()
  94. #СЕРЕБРО
  95. plt.figure(figsize=[15,10])
  96.  
  97. plt.hist(b_data_train['final.output.concentrate_ag'], bins=110, label = 'final', alpha=.5)
  98. plt.hist(b_data_train['primary_cleaner.output.concentrate_ag'], bins=110, label = 'primary_cleaner', alpha=.5)
  99. plt.hist(b_data_train['rougher.output.concentrate_ag'], bins=110, label = 'rougher.output', alpha=.5)
  100. plt.hist(b_data_train['rougher.input.feed_ag'], bins=100, label = 'rougher.input', alpha=.5)
  101.  
  102. plt.xlim([0, 60])
  103. plt.ylim([0, 1000])
  104.  
  105. plt.xlabel("Концентрация серебра на выходе этапов")
  106. plt.ylabel("Количество результатов")
  107.  
  108. plt.legend()
  109.  
  110. plt.title("Гистограмма распределения концентрации серебра")
  111. plt.show()
  112.  
  113. plt.figure(figsize=[15,10])
  114.  
  115. plt.hist(b_data_train['final.output.concentrate_pb'], bins=100, label = 'final', alpha=.5)
  116. plt.hist(b_data_train['primary_cleaner.output.concentrate_pb'], bins=100, label = 'primary_cleaner', alpha=.5)
  117. plt.hist(b_data_train['rougher.output.concentrate_pb'], bins=100, label = 'rougher.output', alpha=.5)
  118. plt.hist(b_data_train['rougher.input.feed_pb'], bins=100, label = 'rougher.input', alpha=.5)
  119.  
  120.  
  121. plt.xlim([0, 60])
  122. plt.ylim([0, 1000])
  123.  
  124. plt.xlabel("Концентрация свинца на выходе этапов")
  125. plt.ylabel("Количество результатов")
  126.  
  127. plt.legend()
  128.  
  129. plt.title("Гистограмма распределения концентрации свинца")
  130. plt.show()
  131.  
  132.  
  133. plt.figure(figsize=[15,10])
  134.  
  135. plt.hist(b_data_train['rougher.input.feed_size'], bins=220, label = 'Размер-обучающая', alpha=.55)
  136. plt.hist(data_test['rougher.input.feed_size'], bins=220, label = 'Размер-тестовая', alpha=.55)
  137.  
  138. plt.xlim([0, 60])
  139. plt.ylim([0, 1200])
  140.  
  141. plt.xlabel("Размер сырья")
  142. plt.ylabel("Количество результатов")
  143.  
  144. plt.legend()
  145.  
  146. plt.title("Гистограмма распределения гранул сырья перед флотацией")
  147. plt.show()
  148.  
  149. # Перед первичной
  150. plt.figure(figsize=[15,10])
  151.  
  152. plt.hist(b_data_train['primary_cleaner.input.feed_size'], bins=100, label = 'Размер-обучающая', alpha=.5,density=True)
  153. plt.hist(data_test['primary_cleaner.input.feed_size'], bins=100, label = 'Размер-тестовая', alpha=.5,density=True)
  154.  
  155. plt.xlim([0, 20])
  156. plt.ylim([0, 800])
  157.  
  158. plt.xlabel("Размер гранул")
  159. plt.ylabel("Количество результатов")
  160.  
  161. plt.legend()
  162.  
  163. plt.title("Гистограмма распределения гранул сырья перед первичной очисткой")
  164. plt.show()
  165.  
  166. #постоим гистограмму со всеми этапами
  167. final_output_concentrate_all = (b_data_train['final.output.concentrate_au'] +
  168.                                       b_data_train['final.output.concentrate_ag'] +
  169.                                       b_data_train['final.output.concentrate_pb'])
  170.  
  171. primary_cleaner_output_concentrate_all = (b_data_train['primary_cleaner.output.concentrate_au'] +
  172.                                                 b_data_train['primary_cleaner.output.concentrate_ag'] +
  173.                                                 b_data_train['primary_cleaner.output.concentrate_pb'])
  174.  
  175. rougher_output_concentrate_all = (b_data_train['rougher.output.concentrate_au'] +
  176.                                         b_data_train['rougher.output.concentrate_ag'] +
  177.                                         b_data_train['rougher.output.concentrate_pb'])
  178. rougher_input_all = (b_data_train['rougher.input.feed_au'] +
  179.                                         b_data_train['rougher.input.feed_ag'] +
  180.                                         b_data_train['rougher.input.feed_pb'])
  181.  
  182.  
  183. plt.figure(figsize=[15,10])
  184.  
  185. plt.hist(final_output_concentrate_all, bins=100, label = 'final_output', alpha=.4)
  186. plt.hist(primary_cleaner_output_concentrate_all, bins=100, label = 'primary_cleaner_output', alpha=.4)
  187. plt.hist(rougher_output_concentrate_all, bins=100, label = 'rougher_output', alpha=.4)
  188. plt.hist(rougher_input_all, bins=100, label = 'rougher_input', alpha=.4)
  189.  
  190. plt.xlim([0, 100])
  191. plt.ylim([0, 1200])
  192.  
  193. plt.xlabel("Концентраця")
  194. plt.ylabel("Количество результатов")
  195.  
  196. plt.legend()
  197.  
  198. plt.title("Гистограмма распределения концентраций на всех этапах")
  199. plt.show()
  200.  
  201. b_data_train[b_data_train['primary_cleaner.output.concentrate_au'] < 1]['primary_cleaner.output.concentrate_au'].count()
  202. b_data_train = b_data_train.drop(b_data_train[b_data_train['primary_cleaner.output.concentrate_au'] == 0].index)
  203.  
  204. def SMAPE(y_true,y_pred):
  205.     res = np.mean(abs(y_true - y_pred)/((abs(y_true)+abs(y_pred))/2))*100
  206.     return res
  207. def final_SMAPE(SMAPE_rougher,SMAPE_final):
  208.     return (0.25*SMAPE_rougher + 0.75*SMAPE_final)
  209.  
  210. features_columns = data_test.columns[1:] # Оставим все столбцы кроме data, так как не несет никаког осмысла для обучения
  211. rougher_features_columns = set(features_columns[12:34]) # Для предсказания rougher.output.recovery используем данные
  212. #из стобцов rougher
  213. final_features_columns = set(features_columns) # Тут будем использовать все столбцы из тестовой выборки
  214.  
  215. # Подготовка признаков для final.output.recovery
  216. columns_to_delete = set(b_data_train.columns) - final_features_columns
  217. train_features_data_final = b_data_train.drop(columns_to_delete, axis=1)
  218.  
  219. # Подготовка признаков для rougher.output.recovery
  220. columns_to_delete = set(train_features_data_final.columns) - rougher_features_columns
  221. train_features_data_rougher = train_features_data_final.drop(columns_to_delete, axis=1)
  222. train_target_data_final = b_data_train['final.output.recovery']
  223. train_target_data_rougher = b_data_train['rougher.output.recovery']
  224. test_features = data_test.drop('date', axis=1)
  225. test_features_final = test_features
  226. columns_to_delete = set(test_features_final.columns) - rougher_features_columns
  227. test_features_rougher = test_features_final.drop(columns_to_delete, axis=1)
  228.  
  229. train_features_data_rougher.info()
  230.  
  231. # Cчетчик функции - Создайте показатель оценки на основе показателя производительности или функции потерь.
  232. custom_score = make_scorer(SMAPE,greater_is_better=False)
  233. #Постройте Pipeline из заданных оценок.
  234. model_forest = make_pipeline(StandardScaler(),RandomForestRegressor())
  235. model_tree = make_pipeline(StandardScaler(),DecisionTreeRegressor())
  236.  
  237. #инициализация
  238. params_RF = {"randomforestregressor__n_estimators":[5,50],
  239.              "randomforestregressor__max_depth":[1,11]}
  240. params_DT= {"decisiontreeregressor__max_depth":[1,6]}
  241. #Исчерпывающий поиск по указанным значениям параметров для оценщика.
  242. grid_rougher = GridSearchCV(model_forest,param_grid = params_RF,scoring=custom_score)
  243. grid_final = GridSearchCV(model_forest,param_grid = params_RF,scoring=custom_score)
  244. grid_rougher_DT = GridSearchCV(model_tree,param_grid = params_DT,scoring=custom_score)
  245. grid_final_DT = GridSearchCV(model_tree,param_grid = params_DT,scoring=custom_score)
  246.  
  247. #обучение
  248. grid_rougher.fit(train_features_data_rougher,train_target_data_rougher)
  249. grid_final.fit(train_features_data_final,train_target_data_final)
  250. grid_rougher_DT.fit(train_features_data_rougher,train_target_data_rougher)
  251. grid_final_DT.fit(train_features_data_final,train_target_data_final)
  252.  
  253. print("Лучшие модели")
  254. print(grid_rougher.best_estimator_)
  255. print(grid_final.best_estimator_)
  256. print(grid_rougher_DT.best_estimator_)
  257. print(grid_final_DT.best_estimator_)
  258.  
  259. best_score_rougher = grid_rougher.best_score_
  260. best_score_final = grid_final.best_score_
  261. best_score_rougher_DT = grid_rougher_DT.best_score_
  262. best_score_final_DT = grid_final_DT.best_score_
  263.  
  264. print("rougher")
  265. print("RandomForest",best_score_rougher,"DecisionTree",best_score_rougher_DT)
  266. print("final")
  267. print("RandomForest",best_score_final,"DecisionTree",best_score_final_DT)
  268.  
  269. #тестовая выборка
  270. test_frame_for_target = data_test.merge(data_full.loc[:,['date',"rougher.output.recovery",
  271.                                                            "final.output.recovery"]],on = 'date')
  272. target_test_rougher = test_frame_for_target["rougher.output.recovery"]
  273. target_test_final = test_frame_for_target["final.output.recovery"]
  274. not_nan_index = set(test_features_rougher.index)
  275. rougher_recovery_real = data_full.loc[not_nan_index,'rougher.output.recovery']
  276. final_recovery_real = data_full.loc[test_features_final.index,'final.output.recovery']
  277.  
  278. final_recovery_real = data_full.loc[not_nan_index,'final.output.recovery']
  279. test_features_rougher = test_features_rougher.loc[not_nan_index,:]
  280. test_features_final = test_features_final.loc[not_nan_index,:]
  281.  
  282. rogher_test = grid_rougher.predict(test_features_rougher)
  283. final_test = grid_final.predict(test_features_final)

Replies to Untitled rss

Title Name Language When
Re: Untitled Mature Macaw text 2 Months ago.

Reply to "Untitled"

Here you can reply to the paste above