{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"\n#encoding: utf-8\nimport numpy as np\nimport pandas as pd\nfrom time import time\nimport matplotlib.pyplot as plt\nimport warnings\nfrom sklearn.model_selection import GridSearchCV\nfrom sklearn.model_selection import train_test_split\nfrom sklearn import svm\nfrom sklearn.decomposition import PCA\nfrom sklearn.preprocessing import MinMaxScaler\n\nwarnings.filterwarnings(\"ignore\", category=FutureWarning, module=\"sklearn\", lineno=193)\ntrain = pd.read_csv('../input/Kannada-MNIST/train.csv')\ntest = pd.read_csv('../input/Kannada-MNIST/test.csv')\n\n#train.info()\n#test.info()\n#train.isnull().any().describe()\n\nX = train.iloc[:,1:]\ny = train.iloc[:,0]\n\n#抽取train数据进行绘图\n'''\nplt.figure(figsize = (10,5))\n\nfor num in range(0,10):\n    plt.subplot(2,5,num+1)\n    #将长度为784的向量数据转化为28*28的矩阵\n    grid_data = X.iloc[num].values.reshape(28,28)\n    #print(grid_data)\n    #显示图片，颜色为黑白\n    plt.imshow(grid_data, interpolation = \"none\", cmap = \"Greys\")\n#plt.show()\n'''\n\n# 特征预处理,将特征的值域规范化\nX = MinMaxScaler().fit_transform(X)\ntest = MinMaxScaler().fit_transform(test)\n\n# 分开训练集和测试集\nX_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.1, random_state = 14)\n\n\n# 使用主成分分析,降低维度\nall_scores = []\n# 生成n_components的取值列表\nn_components = np.linspace(0.5,0.9,num=20, endpoint=False)\n'''\ndef get_accuracy_score(n, X_train, X_test, y_train, y_test):\n#当主成分为n时,计算模型预测的准确率 \n    t0 = time()\n    pca = PCA(n_components = n)\n    pca.fit(X_train)\n    X_train_pca = pca.transform(X_train)\n    X_test_pca = pca.transform(X_test)\n    # 使用支持向量机分类器\n    clf = svm.SVC()\n    clf.fit(X_train_pca, y_train)\n    # 计算准确度\n    accuracy = clf.score(X_test_pca, y_test)\n    t1 = time()\n    print('n_components:{:.2f} , accuracy:{:.4f} , time elaps:{:.2f}s'.format(n, accuracy, t1-t0))\n    return accuracy \n\nfor n in n_components:\n    score = get_accuracy_score(n,X_train, X_test, y_train, y_test)\n    all_scores.append(score)  \n'''\n'''\n# 画出主成分和准确度的关系图，主成分n_components的临界值为0.56时，精确度最高\nplt.plot(n_components, all_scores, '-o')\nplt.xlabel('n_components')\nplt.ylabel('accuracy')\nplt.show()\n'''\n#找出识别有误的数据\npca = PCA(n_components = 0.78)\npca.fit(X_train)\nX_train_pca = pca.transform(X_train)\nX_test_pca = pca.transform(X_test)\n\nclf = svm.SVC()\nclf.fit(X_train_pca, y_train)\ny_pred = clf.predict(X_test_pca)\n\nerrors = (y_pred != y_test)\ny_pred_errors = y_pred[errors]\ny_test_errors = y_test[errors].values\nX_test_errors = X_test[errors]\n'''\n# 查看数据\nprint(y_pred_errors[:5])\nprint(y_test_errors[:5])\nprint(X_test_errors[:5])\n\n# 数据可视化,查看预测有误的数字\nn = 0\nnrows = 2\nncols = 5\n\nfig, ax = plt.subplots(nrows,ncols,figsize=(10,6))\n\nfor row in range(nrows):\n    for col in range(ncols):\n        ax[row,col].imshow((X_test_errors[n]).reshape((28,28)), cmap = \"Greys\")\n        ax[row,col].set_title(\"Predict:{}\\nTrue: {}\".format(y_pred_errors[n],y_test_errors[n]))\n        n += 1\n\nplt.show()\n'''\n\n# n_components为0.56时, 模型的准确率最高\n# 对训练集和测试集进行PCA降低维度处理, 主成分个数为39\npca = PCA(n_components=0.56)\npca.fit(X)\n# 打印主成分个数\nprint(pca.n_components_)\n\n# 修改\ndf_test = pd.DataFrame(test,index = None)\n# 对训练集和测试集进行主成分转换\nX = pca.transform(X)\ntest_no_id = df_test.iloc[:,1:]\ntest = pca.transform(test_no_id)\n\n# 使用支持向量机预测,使用网格搜索进行调参\n\nclf_svc = GridSearchCV(estimator=svm.SVC(), param_grid={ 'C': [1, 2, 4, 5], 'kernel': [ 'linear', 'rbf', 'sigmoid' ] }, cv=5, verbose=2 ) \n# 训练算法\nclf_svc.fit(X, y)\n# 显示使模型准确率最高的参数\nprint(clf_svc.best_params_)\n\n# 预测\npreds = clf_svc.predict(test)\nimage_id = pd.Series(range(0,len(preds)))\nresult_2 = pd.DataFrame({'id': image_id,'label':preds})\n# 保存为CSV文件\nresult_2.to_csv('submission.csv',index = False)\nprint('Done')\n","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","collapsed":true,"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":false},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat":4,"nbformat_minor":1}