{"cells":[{"metadata":{"_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","trusted":false,"collapsed":true},"cell_type":"code","source":"import scipy\nimport numpy as np\nimport pandas as pd\nimport librosa\n\nfrom sklearn.model_selection import train_test_split\nfrom scipy.io import wavfile\n\nimport os\nfrom tqdm import tqdm, tqdm_pandas, tqdm_notebook\nprint(os.listdir(\"../input\"))","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"f47c5e50-285a-4cdd-985e-c7875c8ad261","_uuid":"f3d7a8758e4290e3e9d75958f54c6f60a22ffec3"},"cell_type":"markdown","source":"<H2><center> Feature Extraction"},{"metadata":{"collapsed":true,"_cell_guid":"eb888b4f-1c65-4892-ba47-df7dacb17fd1","_uuid":"a6d8f968c2624c3a2d008b2f79a0ab0dc22dc0e4","trusted":false},"cell_type":"code","source":"INIT_PATH = '../input/'\nTRAIN_PATH = os.path.join(INIT_PATH, 'audio_train')\nTEST_PATH = os.path.join(INIT_PATH, 'audio_test')\nSAMPLE_RATE = 44100\nRANDOM_STATE = 131","execution_count":null,"outputs":[]},{"metadata":{"collapsed":true,"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":false},"cell_type":"code","source":"audio_test_files = os.listdir(TEST_PATH)\ntrain_df = pd.read_csv(os.path.join(INIT_PATH, 'train.csv'))\nsub_df = pd.read_csv(os.path.join(INIT_PATH, 'sample_submission.csv'))","execution_count":null,"outputs":[]},{"metadata":{"collapsed":true,"_cell_guid":"9210ac72-d905-4e40-a308-44d1293b4cd4","_uuid":"1c33334d43b312786ab77e53380a4607d16a9666","trusted":false},"cell_type":"code","source":"def get_intersection_ts_feuters(ts, smr, n=10, fname=''):\n    try:\n        x = []\n        ts = ts - np.mean(ts)\n        ts = np.abs(ts)\n        dts = np.diff(ts)\n        length_ts = len(ts)\n        step = length_ts//(2*n)\n        for i in range(step, length_ts, step):\n            fts = ts[i-step:i+step]\n            fdts = dts[i-step:i+step]\n            x.append(np.mean(fdts))\n            x.append(np.std(fdts))\n            x.append(np.min(fdts))\n            x.append(np.max(fdts))\n            x.append(np.median(fdts))\n            x.append(scipy.stats.skew(fdts))\n            x.append(np.mean(fdts))\n            x.append(np.std(fdts))\n            x.append(np.min(fdts))\n            x.append(np.max(fdts))\n            x.append(np.median(fdts))\n            x.append(scipy.stats.skew(fdts))\n        x.append(length_ts/smr)\n        return x\n    except:\n        print('bad file {0}'.format(fname))\n        return [0]*(2*n)\n\ndef get_intersection_mfcc_feuters(ts, smr, n=10, fname=''):\n    try:\n        x = []\n        ts = ts - np.mean(ts)\n        mfcc = librosa.feature.mfcc(ts, sr = smr, n_mfcc=30)\n        delta_mfcc  = librosa.feature.delta(mfcc)\n        length_mfcc = len(mfcc)\n        step = length_mfcc//(2*n)\n        for i in range(step, length_mfcc, step):\n            fmfcc = mfcc[:][i-step:i+step]\n            x.extend(np.mean(fmfcc,axis=1).tolist())\n            x.extend(np.std(fmfcc,axis=1).tolist())\n            x.extend(np.min(fmfcc,axis=1).tolist())\n            x.extend(np.max(fmfcc,axis=1).tolist())\n            x.extend(np.median(fmfcc,axis=1).tolist())\n            x.extend(scipy.stats.skew(fmfcc,axis=1).tolist())\n            fdmfcc = delta_mfcc[:][i-step:i+step]\n            x.extend(np.mean(fdmfcc,axis=1).tolist())\n            x.extend(np.std(fdmfcc,axis=1).tolist())\n            x.extend(np.min(fdmfcc,axis=1).tolist())\n            x.extend(np.max(fdmfcc,axis=1).tolist())\n            x.extend(np.median(fdmfcc,axis=1).tolist())\n            x.extend(scipy.stats.skew(fdmfcc,axis=1).tolist())\n        return x\n    except:\n        print('bad file {0}'.format(fname))\n        return [0]*(2*n*20+1)","execution_count":null,"outputs":[]},{"metadata":{"collapsed":true,"_cell_guid":"fef1ac4d-81fe-466b-8246-d0fceab3583e","_uuid":"b3bd9eb3d2bf61101edc045bd96ea724f95e67c9","trusted":false},"cell_type":"code","source":"def get_feuters(name, path):\n    ts, smr = librosa.core.load(os.path.join(path, name), sr=SAMPLE_RATE)\n    fts = get_intersection_ts_feuters(ts, smr, n=2, fname=name)\n    fmfcc = get_intersection_mfcc_feuters(ts, smr, n=2, fname=name)\n    fmfcc.extend(fts)\n    return pd.Series(fmfcc)","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"55444bd5-6ecc-4b7c-bf9b-380c0fd2fc97","_uuid":"3a27c26a82578747c5d7e4c66f5ae5d386f6dbad","trusted":false,"collapsed":true},"cell_type":"code","source":"train_data = pd.DataFrame()\ntrain_data['fname'] = train_df['fname']\ntest_data = pd.DataFrame()\ntest_data['fname'] = os.listdir(TEST_PATH)\n\ntqdm_pandas(tqdm, desc='extraction train feature')\ntrain_data = train_data['fname'].progress_apply(get_feuters, path=TRAIN_PATH)\ntqdm_pandas(tqdm, desc='extraction test feature')\ntest_data = test_data['fname'].progress_apply(get_feuters, path=TEST_PATH)","execution_count":null,"outputs":[]},{"metadata":{"collapsed":true,"_cell_guid":"cd66b2c6-182e-4bf8-95b3-27c586af0465","_uuid":"a8c2d28ec531f2382537fba7ae91912326b73ceb","trusted":false},"cell_type":"code","source":"train_data['fname'] = train_df['fname']\ntest_data['fname'] = os.listdir(TEST_PATH)\ntrain_data['label'] = train_df['label']\ntest_data['label'] = np.zeros((len(test_data)))","execution_count":null,"outputs":[]},{"metadata":{"collapsed":true,"_cell_guid":"e945c345-5331-4672-8d44-123cee54de24","_uuid":"63586a0b8579023fbad6021862aabfe3bf204fd5","scrolled":true,"trusted":false},"cell_type":"code","source":"train_data.head()","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"cbf892ef-4b07-4d2f-98ef-797ae4979760","_uuid":"423530000b9583d401985b70a6c9e045cf8a38ec"},"cell_type":"markdown","source":"<H2><center> Catboost Classifier"},{"metadata":{"collapsed":true,"_cell_guid":"913cd783-587d-47bc-a120-f529cfe18b19","_uuid":"52690c72a0aeaff5d8e975339b493c5e18702061","trusted":false},"cell_type":"code","source":"import catboost as cb","execution_count":null,"outputs":[]},{"metadata":{"collapsed":true,"_cell_guid":"54a3fee2-b7bf-4891-a8cd-b06b560bd934","_uuid":"e716d57978775f607b824aa272f17469cc74180a","trusted":false},"cell_type":"code","source":"c2i = {}\ni2c = {}\nlabels = np.sort(np.unique(train_data.label.values))\nfor i, c in enumerate(labels):\n    c2i[c] = i\n    i2c[i] = c\ny = np.array([c2i[x] for x in train_data.label.values])","execution_count":null,"outputs":[]},{"metadata":{"collapsed":true,"_cell_guid":"8f57d284-ef6e-4e27-8bae-29382876fd87","_uuid":"405d041e293262ce623a47a7bf7d2e67a1759261","trusted":false},"cell_type":"code","source":"length_col = train_data.shape[1]-2\nprint(length_col)\ntrain_data = train_data.fillna(0)\nX = train_data[[i for i in range(length_col)]].values\ntest_data = test_data.fillna(0)\nX_test = test_data[[i for i in range(length_col)]].values","execution_count":null,"outputs":[]},{"metadata":{"collapsed":true,"_cell_guid":"d490bce1-f9ce-4a0a-9b67-e36d48e62a2c","_uuid":"719f0a97e172157488261e19d29f4f613790b8bc","trusted":false},"cell_type":"code","source":"X_train, X_valid, y_train, y_valid = train_test_split(X, y, train_size=0.8, shuffle=True, random_state=131)","execution_count":null,"outputs":[]},{"metadata":{"collapsed":true,"_cell_guid":"2b9932e3-7469-4538-b30c-ba41e6d02d2d","_uuid":"fcc5074946b44c58283fcd206138d15a9c07b07f","trusted":false},"cell_type":"code","source":"from sklearn.preprocessing import StandardScaler\nsc = StandardScaler().fit(X_train)\nX_train = sc.transform(X_train)\nX_valid = sc.transform(X_valid)\nX_test = sc.transform(X_test)","execution_count":null,"outputs":[]},{"metadata":{"collapsed":true,"_cell_guid":"93c6e512-7393-44f3-a52a-abd3e561eef2","_uuid":"bb867f3995ce7eb43c2e65dbb3d239f4285318cb","trusted":false},"cell_type":"code","source":"train_pool = cb.Pool(X_train, y_train)\nvalid_pool = cb.Pool(X_valid, y_valid)\ntest_pool = cb.Pool(X_test)","execution_count":null,"outputs":[]},{"metadata":{"collapsed":true,"_cell_guid":"3c2b1eb8-f440-48a2-9d37-274f66150e9c","_uuid":"d858be2ff02ab18a0b28c88aafd572e18aaec0a2","trusted":false},"cell_type":"code","source":"clf = cb.CatBoostClassifier(iterations=2000,\n                            learning_rate=0.05,\n                            l2_leaf_reg=15,\n                            depth = 6,\n                            leaf_estimation_iterations=3,\n                            border_count=64,\n                            loss_function='MultiClass',\n                            custom_metric=['Accuracy'],\n                            eval_metric='Accuracy',\n                            random_seed=RANDOM_STATE,\n                            classes_count=41\n                           ).fit(train_pool, eval_set=valid_pool, verbose=False, plot=True)","execution_count":null,"outputs":[]},{"metadata":{"collapsed":true,"_cell_guid":"edabafff-d124-4f53-a2c1-d828593f214f","_uuid":"8683c0cffaf7dc82ccf37acd95d6207416bc54b2","trusted":false},"cell_type":"code","source":"pred = clf.predict(test_pool)","execution_count":null,"outputs":[]},{"metadata":{"collapsed":true,"_cell_guid":"6d257b11-6e48-4ef1-8a8a-22bd81e24105","_uuid":"a96d612f1df1bda9f1d9f33fe0c19229c227e329","trusted":false},"cell_type":"code","source":"test_data['label'] = [i2c[int(p[0])] for p in pred]\nsub = test_data[['fname', 'label']]\nsub.to_csv('sub_catboost.csv', index=False)","execution_count":null,"outputs":[]},{"metadata":{"collapsed":true,"_cell_guid":"0a0172b1-aac6-404d-bf1c-246ebf2cf39b","_uuid":"74d7bcb140e5a69ebf0de6d4031e6f64fff2b307","trusted":false},"cell_type":"code","source":"sub.head()","execution_count":null,"outputs":[]},{"metadata":{"collapsed":true,"_cell_guid":"a1f6096f-b8dc-4926-980a-f5338d362ff5","_uuid":"14238c9ae9b46df338789d215223a06735fa2a70","trusted":false},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"language_info":{"name":"python","version":"3.6.4","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"}},"nbformat":4,"nbformat_minor":1}