#python #jupyter-notebook
Вопрос:
Я пытаюсь подогнать свои данные, используя свой выбор функций, но всякий раз, когда я пытаюсь, я получаю эту ошибку
Input contains NaN, infinity or a value too large for dtype('float64').
Не уверен, есть ли решение этой проблемы или я могу применить к ней другой подход, но я знаю, что если я собираюсь использовать выбор функций, я должен применить его перед своим алгоритмом,
#!/usr/bin/env python # coding: utf-8 # In[1]: from sklearn.model_selection import train_test_split # In[2]: import pandas as pd # In[3]: import matplotlib.pyplot as plt # In[4]: import numpy as np # In[5]: import seaborn as sns import statsmodels.api as sm import mglearn as mg get_ipython().run_line_magic('matplotlib', 'inline') # In[6]: from sklearn.ensemble import AdaBoostRegressor from sklearn.feature_selection import RFE from sklearn. feature_selection import SelectFromModel # In[7]: first_file = pd.read_csv(r"/Users/feliperivas/Downloads/MachineLearningCVE/Friday-WorkingHours-Afternoon-DDos.pcap_ISCX.csv") # In[8]: print(first_file) # In[9]: second_file = pd.read_csv(r"/Users/feliperivas/Downloads/MachineLearningCVE/Friday-WorkingHours-Afternoon-PortScan.pcap_ISCX.csv") third_file = pd.read_csv(r"/Users/feliperivas/Downloads/MachineLearningCVE/Friday-WorkingHours-Morning.pcap_ISCX.csv") fourth_file = pd.read_csv(r"/Users/feliperivas/Downloads/MachineLearningCVE/Monday-WorkingHours.pcap_ISCX.csv") fifth_file = pd.read_csv(r"/Users/feliperivas/Downloads/MachineLearningCVE/Thursday-WorkingHours-Afternoon-Infilteration.pcap_ISCX.csv") sixth_file = pd.read_csv(r"/Users/feliperivas/Downloads/MachineLearningCVE/Thursday-WorkingHours-Morning-WebAttacks.pcap_ISCX.csv") seventh_file = pd.read_csv(r"/Users/feliperivas/Downloads/MachineLearningCVE/Tuesday-WorkingHours.pcap_ISCX.csv") eighth_file = pd.read_csv(r"/Users/feliperivas/Downloads/MachineLearningCVE/Wednesday-workingHours.pcap_ISCX.csv") # In[10]: print(second_file) # In[11]: print(third_file) # In[12]: print(fourth_file) # In[13]: print(fifth_file) # In[14]: print(sixth_file) # In[15]: print(seventh_file) # In[16]: print(eighth_file) # In[17]: first_file = first_file.loc[:,~first_file.columns.duplicated()] # In[18]: print(first_file) # In[19]: df_list = [first_file, second_file,third_file,fourth_file, fifth_file, sixth_file, seventh_file,eighth_file] # In[20]: merged_data = pd.concat(df_list) # In[21]: print(merged_data) # print(merged_data.shape) # In[22]: print(merged_data.shape) # In[23]: print(first_file.shape) # In[24]: print(second_file.shape) # In[25]: print(third_file.shape) # In[26]: print(fourth_file.shape) # In[27]: print(fifth_file.shape) # In[28]: print(sixth_file.shape) # In[29]: print(seventh_file.shape) # In[30]: print(eighth_file.shape) # In[31]: # 2830540 number weretrying to get # In[32]: # df = merged_data.dropna() # In[33]: print(merged_data.shape) # In[34]: merged_data.dropna(inplace = True) # In[35]: print(merged_data.shape) # In[36]: df = merged_data # In[37]: df.shape # In[38]: df.dropna(inplace = True) # In[39]: keys_num = len(df.keys()) # In[40]: df.keys() # In[41]: df.head() # In[42]: df.keys() # In[43]: y= df[' Label'] # In[44]: y # In[45]: X = df.drop(' Label',axis=1) # In[46]: X # In[47]: estimator = AdaBoostRegressor(n_estimators=100, random_state=0) # In[48]: selector = RFE(estimator, n_features_to_select=12, step=1) # In[49]: selector.fit(X, y) # In[50]: cid = AdaBoostRegressor( n_estimators=100,random_state=0) # In[51]: X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2) # In[52]: cid.fit(X_train, y_train) # In[ ]: trainning_score = cid.score(X_train, y_train) # In[ ]: print("Training Score: {0}".format(trainning_score)) # In[ ]: testing_score = cid.score(X_test, y_test) # In[ ]: print("Test Score: {0}".format(testing_score)) # In[ ]: print(X_train.shape) # In[ ]: print(X_test.shape) # In[ ]: estimator = AdaBoostRegressor(n_estimators=100, random_state=0) # In[ ]: selector = RFE(estimator, n_features_to_select=5, step=1) # In[ ]: selector = selector.fit(X_train, y_train) # In[ ]: trainning_score = selector.score(X_train, y_train) # In[ ]: print("Training Score: {0}".format(trainning_score)) # In[ ]:
Это и есть ОШИБКА!!!:
В[ ]: селектор.подгонка(X, y)
————————————————————————— Трассировка ошибки значения (последний последний вызов) в — — — — gt; 1 селектор.подходит(X, y)
~/opt/anaconda3/lib/python3.8/site-packages/sklearn/feature_selection/_rfe.py в соответствии(self, X, y) с целевыми значениями. 183 «»» —gt; 184 возврат self._fit(X, y) 185 186 защита _fit(self, X, y, step_score=Нет):
~/opt/anaconda3/lib/python3.8/site-packages/sklearn/feature_selection/_rfe.py в _fit(self, X, y, step_score) 191 192 тега = self._get_tags() —gt; 193 X, y = self._validate_data( 194 X, y, accept_sparse=»csc», 195 ensure_min_features=2,
~/opt/anaconda3/lib/python3.8/site-packages/sklearn/base.py в _validate_data(self, X, y, сброс, проверка отдельно, **check_params) 431 y = check_array(y, **check_y_params) 432 еще: —gt; 433 X, y = check_X_y(X, y, **check_params) 434 out = X, y 435
~/opt/anaconda3/lib/python3.8/пакеты сайтов/sklearn/utils/проверка.py в inner_f(*args, **kwargs) 61 extra_args = len(args) — len(all_args) 62 если extra_args lt;= 0: —gt; 63 верните f(*args, **kwargs) 64 65 # extra_args lt;= 0: —gt;gt; 0
~/opt/anaconda3/lib/python3.8/пакеты сайтов/sklearn/utils/проверка.py в check_X_y(X, y, accept_sparse, accept_large_sparse, dtype, порядок, копирование, принудительное выполнение, конечное значение, ensure_2d, allow_nd, мульти_вход, примеры ensure_min_samples, параметры ensure_min_features, y_numeric, оценщик) 812 ошибка повышения значения(«y не может быть None») 813 —gt; 814 X = check_array(X, accept_sparse=accept_sparse, 815 accept_large_sparse=accept_large_sparse, 816 dtype=dtype, заказ=заказ, копия=копия,
~/opt/anaconda3/lib/python3.8/пакеты сайтов/sklearn/utils/проверка.py в inner_f(*args, **kwargs) 61 extra_args = len(args) — len(all_args) 62 если extra_args lt;= 0: —gt; 63 верните f(*args, **kwargs) 64 65 # extra_args lt;= 0: —gt;gt; 0
~/opt/anaconda3/lib/python3.8/пакеты сайтов/sklearn/utils/проверка.py в check_array(массив, accept_sparse, accept_large_sparse, dtype, порядок, копирование, принудительная проверка, гарантированные_2d, разрешение_nd, гарантированные_мин_примеры, гарантированные_мин_феатуры, оценщик) 661 662, если принудительная проверка: —gt; 663 _ассерт_алло_финит(массив, 664 allow_nan=принудительная проверка == ‘разрешить-nan’) 665
~/opt/anaconda3/lib/python3.8/пакеты сайтов/sklearn/utils/проверка.py в _assert_all_finite(X, allow_nan, msg_dtype) 101 не allow_nan и не np.isfinite(X).все()): 102 type_err = «бесконечность», если allow_nan еще «NaN,бесконечность» — gt; 103 поднять ошибку значения( 104 msg_err.формат 105 (type_err, ошибка значения: Входные данные содержат NaN, бесконечность или значение, слишком большое для dtype(‘float64’).
Комментарии:
1. пожалуйста, опубликуйте все свое сообщение erro5r, начиная с обратной связи.
Ответ №1:
Возможно, это не тот ответ, который вы хотите услышать, но он имеет некоторое значение.
Хорошей практикой при попытке выполнить практически любой тип обучения или анализа данных является сначала очистка данных. Один из этих шагов может включать удаление или обработку «Nan», «бесконечности» или других неуместных выбросов.
Существует множество способов сделать это, но в вашем случае я бы предложил сделать все это для начала:
- Удалите строки со значениями Nan.
- Удалите строки со значениями бесконечности.
- Переместите все значения так, чтобы они находились в пределах размера данных float64, или удалите строки, содержащие числа, выходящие за пределы размера данных float64.
- Удалите столбцы с чрезмерно большим диапазоном.
Вот функция, которую я часто использую для первой проверки данных на предмет очистки.
def calc_summary_for(feature_name:str, data:DataFrame) -gt; DataFrame: """ Calculates Summary Features in list of 'summary_feature_names'. Parameters ---------- feature_name : str Name of feature for summary to be calculated for. required data : pandas.DataFrame object A DataFrame object containg column named feature_name. required Returns : DataFrame object of summary calculated features. """ summary_feature_names = ['Feature Name', 'Cardinality', 'Non-null Count', 'Null Count', 'Min', '25th', 'Mean', '50th', '75th', 'Max', 'Std. Dev','Outlier Count Low', 'Outlier Count High'] # Create DataFrame to return and list at loc to DataFram frame2return = pd.DataFrame(columns=summary_feature_names) list2add = [] # Find claculated features that have bult in functions list2add.append(feature_name) list2add.append(data.shape[0]) list2add.append(data[feature_name].notnull().sum()) list2add.append(data[feature_name].isnull().sum()) list2add.append(data[feature_name].min()) list2add.append(data[feature_name].quantile(q=0.25)) list2add.append(data[feature_name].mean()) # Save for Calcuating IQR list2add.append(data[feature_name].quantile(q=0.5)) Q1 = data[feature_name].quantile(q=0.5) list2add.append(data[feature_name].quantile(q=0.75)) Q3 = data[feature_name].quantile(q=0.75) list2add.append(data[feature_name].max()) list2add.append(data[feature_name].std()) # Find IQR IQR = Q3 - Q1 # Find Range for outliers outerBoundLow = Q1 - (1.5 * IQR) outerBoundHigh = Q3 (1.5 * IQR) # Find calculated features using IQR counting outliers countLow = 0 countHigh = 0 countInBounds = 0 for i in data[feature_name]: if i lt; outerBoundLow: countLow =1 elif i gt; outerBoundHigh: countHigh =1 else : countInBounds =1 list2add.append(countLow) list2add.append(countHigh) # Add list to Dataframe and return it frame2return.loc[len(frame2return)] = list2add return frame2return
Ответ №2:
Я смог решить проблему, заменив бесконечные данные на nan, а затем удалив данные nan
xy = X xy[" Label"] = y_df #xy = dataframe # Replace infinite updated data with nan X.replace([np.inf,-np. inf], np.nan, inplace=True) # Drop rows with NaN X. dropna (inplace=True)