🚀Роль Python в освоении космоса
Этот проект был введением в машинное обучение с использованием реальной проблемы. НАСА должно учитывать множество факторов перед запуском ракеты; они должны проанализировать несколько точек данных, чтобы убедиться, что они могут предсказать условия, необходимые для дня их запуска.
Этот проект включает в себя использование этапов жизненного цикла науки о данных, таких как определение бизнеса/проблемы, сбор и понимание данных, выбор машинной модели и моделирование данных.
Следующая шпаргалка помогла понять, какой лучший алгоритм машинного обучения необходим.
ИМПОРТ БИБЛИОТЕКИ
Мы будем использовать библиотеки Pandas, NumPy, SKLearn и PYDotplus Python.
# Pandas library is used for handling tabular data import pandas as pd # NumPy is used for handling numerical series operations (addition, multiplication, and ...) import numpy as np # Sklearn library contains all the machine learning packages we need to digest and extract patterns from the data from sklearn import linear_model, model_selection, metrics from sklearn.model_selection import train_test_split # Machine learning libraries used to build a decision tree from sklearn.tree import DecisionTreeClassifier from sklearn import tree # Sklearn's preprocessing library is used for processing and cleaning the data from sklearn import preprocessing # for visualizing the tree import pydotplus from IPython.display import Image
СЧИТАЙТЕ ДАННЫЕ В ПЕРЕМЕННУЮ
Мы прочитаем файл .xlse и посмотрим на первые пять строк структурированных данных.
launch_data = pd.read_excel('RocketLaunchDataCompleted.xlsx') launch_data.head()
Как видите, у нас есть несколько строк, целых чисел, чисел с плавающей запятой и довольно много значений NAN.
ИЗУЧАТЬ ДАННЫЕ
Есть много способов исследовать данные. Мы напечатаем все столбцы в наших данных.
launch_data.columns
ОЧИСТКА ДАННЫХ
Необработанные данные часто бывают грязными, поэтому в большинстве проектов анализа данных требуются этапы очистки данных. Чтобы выполнить этот шаг, нам нужно проанализировать наши данные. Мы получим краткий обзор наших данных.
launch_data.info()
Обработка пропущенных значений
## To handle missing values, we will fill the missing values with appropriate values launch_data['Launched?'].fillna('N',inplace=True) launch_data['Crewed or Uncrewed'].fillna('Uncrewed',inplace=True) launch_data['Wind Direction'].fillna('unknown',inplace=True) launch_data['Condition'].fillna('Fair',inplace=True) launch_data.fillna(0,inplace=True) launch_data.head()
Как мы видим, обработка недостающих данных — это следующий шаг.
СМОТРЕТЬ ИЗМЕНЕНИЯ, ВНЕСЕННЫЕ В ДАННЫЕ
Мы должны проанализировать изменения, внесенные в наши данные, с помощью .info().
launch_data.info()
Это выглядит лучше.
МАНИПУЛЯЦИЯ ДАННЫМИ
Нам нужно преобразовать текстовые (строковые) данные в числовые данные (целые/плавающие), чтобы компьютер мог их понять.
## As part of the data cleaning process, we have to convert text data to numerical because computers understand only numbers label_encoder = preprocessing.LabelEncoder() # Three columns have categorical text info, and we convert them to numbers launch_data['Crewed or Uncrewed'] = label_encoder.fit_transform(launch_data['Crewed or Uncrewed']) launch_data['Wind Direction'] = label_encoder.fit_transform(launch_data['Wind Direction']) launch_data['Condition'] = label_encoder.fit_transform(launch_data['Condition']) launch_data.head()FURTHER CLEANING
Проводим дальнейшую очистку, удаляя ненужные нам колонки.
Затем мы перечисляем все переменные, которые понадобятся нашему алгоритму машинного обучения.
# First, we save the output we are interested in. In this case, "launch" yes and no's go into the output variable. y = launch_data['Launched?'] # Removing the columns we are not interested in launch_data.drop(['Name','Date','Time (East Coast)','Location','Launched?','Hist Ave Sea Level Pressure','Sea Level Pressure','Day Length','Notes','Hist Ave Visibility', 'Hist Ave Max Wind Speed'],axis=1, inplace=True) # Saving the rest of the data as input data X = launch_data
Список переменных
# List of variables that our machine learning algorithm is going to look at: X.columns
СОЗДАЙТЕ МОДЕЛЬ МАШИННОГО ОБУЧЕНИЯ
Мы создаем классификатор дерева решений.
# Create decision tree classifier tree_model = DecisionTreeClassifier(random_state=0,max_depth=5)
РАЗДЕЛИТЬ ДАННЫЕ НА ПОЕЗД И ИСПЫТАТЕЛЬНЫЕ ДАННЫЕ
Нам нужно разделить данные на обучающий набор и тестовый набор.
X_train, X_test, y_train, y_test = train_test_split(X,y, test_size=0.2, random_state=99)
СООТВЕТСТВУЙТЕ МОДЕЛИ
Затем мы подгоняем модель к обучающим данным.
# Fitting the model to the training data tree_model.fit(X_train,y_train)
ПРОВЕРКА МОДЕЛИ НА ИСПЫТАТЕЛЬНЫХ ДАННЫХ
Прогнозируем нашу модель на тестовых данных
# Do prediction on test Data y_pred = tree_model.predict(X_test) print(y_pred)
ОЦЕНКА МОДЕЛИ
Следующим шагом является расчет точности.
# Calculate accuracy tree_model.score(X_test,y_test)
ВИЗУАЛИЗАЦИЯ МОДЕЛИ
Для визуализации модели мы используем SKLearn.
# Let's import a library for visualizing our decision tree. from sklearn.tree import export_graphviz def tree_graph_to_png(tree, feature_names,class_names, png_file_to_save): tree_str = export_graphviz(tree, feature_names=feature_names, class_names=class_names, filled=True, out_file=None) graph = pydotplus.graph_from_dot_data(tree_str) return Image(graph.create_png()) # This function takes a machine learning model and visualizes it. tree_graph_to_png(tree=tree_model, feature_names=X.columns.values,class_names=['No Launch','Launch'], png_file_to_save='decision-tree.png') launch_data[(launch_data['Wind Speed at Launch Time'] > 1) & (launch_data['Max Wind Speed'] > 30.5)]
ПРОВЕРЬТЕ МОДЕЛЬ
И, наконец, мы тестируем модель.
# ['Crewed or Uncrewed', 'High Temp', 'Low Temp', 'Ave Temp', # 'Temp at Launch Time', 'Hist High Temp', 'Hist Low Temp', # 'Hist Ave Temp', 'Precipitation at Launch Time', # 'Hist Ave Precipitation', 'Wind Direction', 'Max Wind Speed', # 'Visibility', 'Wind Speed at Launch Time', 'Hist Ave Max Wind Speed', # 'Hist Ave Visibility', 'Condition'] data_input = [ 1. , 75. , 68. , 71. , 0. , 75. , 55. , 65. , 0. , 0.08, 0. , 16. , 15. , 0. , 0. ] tree_model.predict([data_input])
Спасибо, что прочитали эту статью.
Полный проект доступен на моем Gihub. Если вам понравилась моя статья, пожалуйста, поделитесь ею. Предложения приветствуются.
#NeverStopLearning #DataAnalysis #100DayChallenge