Advertisement
igoryanchik

NIR 4

May 22nd, 2023 (edited)
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.91 KB | None | 0 0
  1. import numpy as np
  2. import pandas as pd
  3. from sklearn.model_selection import train_test_split, cross_val_score
  4. from sklearn.tree import DecisionTreeClassifier
  5. from sklearn.metrics import precision_score, recall_score, f1_score
  6. from sklearn.preprocessing import LabelEncoder
  7. from sklearn.ensemble import RandomForestClassifier
  8. from sklearn.metrics import classification_report
  9. from sklearn.model_selection import GridSearchCV
  10.  
  11.  
  12. #Загрузка данных
  13. vgsales = pd.read_csv("vgsales.csv")
  14. #print(vgsales)
  15. #Отберем необходимые параметры
  16.  
  17. vgsales = vgsales.loc[:,vgsales.columns.isin(["Rank","Platform","Year","Genre","Publisher","NA_Sales","EU_Sales","JP_Sales","Other_Sales","Global_Sales",])]
  18. #print(vgsales)
  19.  
  20. #Удалим данные с NA
  21. vgsales = vgsales.dropna()
  22.  
  23. #Жанр Sport = 0, остальные = 1
  24. vgsales['Genre'] = np.where(vgsales['Genre'] == 'Sports', 0, 1)
  25.  
  26. #Преобразуем столбцы со строковыми значениями в числовые
  27. le = LabelEncoder()
  28. vgsales['Platform'] = le.fit_transform(vgsales['Platform'])
  29. vgsales['Publisher'] = le.fit_transform(vgsales['Publisher'])
  30.  
  31.  
  32. vgsales_test = vgsales
  33.  
  34. X_training, X_testing, y_training, y_testing = train_test_split(vgsales_test.drop(['Genre'], axis = 1), vgsales_test['Genre'],
  35.                                                                 test_size = 0.33,
  36.                                                                random_state = 42)
  37.  
  38. #создание и обучение классификатора
  39. model = DecisionTreeClassifier(random_state=42)
  40. model.fit(X_training, y_training)
  41.  
  42. y_predict = model.predict(X_testing)
  43.  
  44. #Оценим точность классификатора
  45. precision = precision_score(y_testing, y_predict)
  46. recall = recall_score(y_testing, y_predict)
  47. f1 = f1_score(y_testing, y_predict)
  48.  
  49. print('precision:', precision)
  50. print('recall:', recall)
  51. print('f1:', f1)
  52.  
  53. depth = model.tree_.max_depth
  54.  
  55. print("Depth:",depth)
  56.  
  57. T_training, T_testing, u_training, u_testing = train_test_split(vgsales_test.drop(['Genre'], axis = 1), vgsales_test['Genre'],
  58.                                                                 test_size = 0.3,
  59.                                                                random_state = 42)
  60. model2 = RandomForestClassifier(random_state = 42)
  61. model2.fit(T_training, u_training)
  62.  
  63. u_predict = model2.predict(T_testing)
  64.  
  65. precision_2 = precision_score(u_testing, u_predict)
  66. recall_2 = recall_score(u_testing, u_predict)
  67. f1_2 = f1_score(u_testing, u_predict)
  68.  
  69. print('precision:', precision_2)
  70. print('recall:', recall_2)
  71. print('f1:', f1_2)
  72.  
  73. #Параметры для перебора
  74. param_grid = {
  75.     "n_estimators": [50, 100, 150, 200],
  76.     "max_depth": [None, 5, 10, 15],
  77.     "min_samples_split": [2, 5, 10],
  78.     "min_samples_leaf": [1, 2, 4],
  79.     "max_features": ["sqrt", "log2"],
  80. }
  81.  
  82. # создание экземпляра класса GridSearchCV
  83. grid_search = GridSearchCV(RandomForestClassifier(random_state=42), param_grid, cv=3, n_jobs=-1)
  84.  
  85. #Обучаем модель на тестовых данных
  86. grid_search.fit(T_training, u_training)
  87.  
  88. # Оцениваем качество классификации
  89. print(classification_report(u_testing, u_predict))
  90. print("Best parameters:", grid_search.best_params_)
  91.  
  92.  
  93. '''
  94. #Случайный лес основан на использовании нескольких классификаторах решающего дерева, которые обучаются на некоторых подмножествах обучающей выборки, а потом дают независимые результаты,
  95. после их ответы объединяются, чтобы определить результат
  96.  
  97.  
  98. # Метрики precision, recall, F1
  99.  
  100. 1) precision:
  101.    P = TP / (TP + FP)
  102.  
  103. 2) recall:
  104.    R = TP / (TP + FN)
  105. 3) F1:
  106.  
  107. '''
  108.  
Tags: NIR4
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement