{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load in \n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the \"../input/\" directory.\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n\n# Any results you write to the current directory are saved as output.","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"import pandas as pd\nfrom sklearn.model_selection import train_test_split\nfrom sklearn import svm\nfrom sklearn.utils.multiclass import unique_labels\nimport numpy as np\nfrom skimage import feature as ft\n\n\nif __name__ == \"__main__\":\n\n    '''\n    数据预处理环节\n    '''\n    #读入数据\n    data_train = pd.read_csv('../input/Kannada-MNIST/train.csv')\n    data_test = pd.read_csv('../input/Kannada-MNIST/test.csv')\n\n    data_train = pd.DataFrame(data_train)\n    data_test = pd.DataFrame(data_test)\n\n    #取出 除去标签列以外的dataframe格式的特征矩阵\n    train_data_dataframe = data_train.iloc[:,1:]\n\n    #取出标签列矩阵\n    label_data_series = data_train['label']\n\n    #特征值和标签列 转化为numpy 中的数组格式\n    train_data = train_data_dataframe.values\n    label_data = label_data_series.values\n\n    #划分训练集合 为训练集和交叉验证集合，其中20%的数据为交叉验证\n    trainData,valData,trainLabel,valLabel = train_test_split(train_data,label_data,test_size=0.2,random_state=33)\n\n    testData = data_test.values[:, 1:]\n\n    #图像数据的标准化和归一化 本来就是灰度图像 除以255\n    trainData = trainData/255\n    valData = valData/255\n    testData = testData / 255\n\n    '''\n    特征工程 HOG边缘（形状/梯度）检测环节   \n    '''\n\n    list_picture_train = []\n    train_features = []\n    list_picture_val = []\n    val_features = []\n    list_picture_test = []\n    test_features = []\n    for i in range(0, len(trainData)):\n        list_picture_train.append(trainData[i].reshape(28, 28))\n    for i in range(0,len(valData)):\n        list_picture_val.append(valData[i].reshape(28, 28))\n    for i in range(0,len(testData)):\n        list_picture_test.append(testData[i].reshape(28, 28))\n    for i in range(0,len(trainData)):\n        train_features.append(ft.hog(list_picture_train[i],  # 输入图像\n                               orientations=8,  # 直方图bin的个数9\n                               pixels_per_cell=(3, 3),  # 每一个细胞单元含8*8个pixel(8,8)\n                               cells_per_block=(1, 1),  # 每一个块含有2*2个cell(2,2)\n                               block_norm='L2-Hys',  # 块为单位的特征向量归一化L2\n                               transform_sqrt=True,  # gamma校正 增强图像对比度\n                               feature_vector=True,  # 铺平得到的最终的特征向量\n                               visualize=False))  # 待定\n    for i in range(0,len(valData)):\n        val_features.append(ft.hog(list_picture_val[i],\n                                orientations=8,\n                                pixels_per_cell=(3, 3),\n                                cells_per_block=(1, 1),\n                                block_norm='L2-Hys',\n                                transform_sqrt=True,\n                                feature_vector=True,\n                                visualize=False))\n    for i in range(0,len(testData)):\n        test_features.append(ft.hog(list_picture_test[i],\n                                orientations=8,\n                                pixels_per_cell=(3, 3),\n                                cells_per_block=(1, 1),\n                                block_norm='L2-Hys',\n                                transform_sqrt=True,\n                                feature_vector=True,\n                                visualize=False))\n    trainData = np.array(train_features)\n    valData = np.array(val_features)\n    testData = np.array(test_features)\n    \n    '''\n    LinearSVC线性核函数的支持向量机SVM\n    '''\n    SVM = svm.LinearSVC(C=1,max_iter=5000)\n\n    SVM.fit(trainData,trainLabel)\n\n    out_train_SVM = SVM.predict(trainData)\n    train_SVM = np.array(out_train_SVM).reshape(-1, 1)\n\n    out_val_SVM = SVM.predict(valData)\n    val_SVM = np.array(out_val_SVM).reshape(-1, 1)\n\n\n    pre_label = SVM.predict(testData)\n    \n    submission = pd.DataFrame(pre_label, columns=['label'])\n\n    submission['id'] = data_test['id']\n\n    submission.to_csv('submission.csv', index=False, columns=['id', 'label'])\n\n\n\n\n","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"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"}},"nbformat":4,"nbformat_minor":1}