# 1.导入包
import pandas as pd
import numpy as np
import time# 2.忽略警告
import warnings
warnings.filterwarnings("ignore")from sklearn.neighbors import KNeighborsClassifier# 3.读取数据
# C:\Users\hjz\AI\project\02_lianxi\01_DigitRecognizer\0_data\train.csv
dataset = pd.read_csv(r"C:\Users\hjz\AI\project\02_lianxi\01_DigitRecognizer\0_data\train.csv")
print("1.训练集大小:",dataset.shape)#(42000, 785)
x_train = dataset.values[0:,1:]
y_train = dataset.values[0:,0]#第零列是y
# 读取测试集
x_test = pd.read_csv(r"C:\Users\hjz\AI\project\02_lianxi\01_DigitRecognizer\0_data\test.csv").values#不包含y# 4.PCA降维
# 数据集维数785维,由于数据集的维数太大,会给计算带来很大的开销,在此对数据进行PCA降维处理,并保证数据的具有原始数据95%的信息
from sklearn.decomposition import PCA
start = time.time()
pca_model = PCA()
pca_model.fit(x_train)
information_list = pca_model.explained_variance_ratio_
score = 0
num = 0
for i in information_list:score += inum += 1if score >= 0.95:print("2.降维num:",num)#154break
#取降维后数据
pca_model =PCA(num)
pca_model.fit(x_train)
x_train = pca_model.transform(x_train)
print("3.降维后训练集大小:",x_train.shape)#(42000, 154)
x_test = pca_model.transform(x_test)
print("4.降维后测试集大小:",x_test.shape)#(28000, 154)
end = time.time()
print("5.PCA耗时%.2f秒"%(end-start))# 5.归一化
#对特征数据进行归一化处理
x_train = (x_train - x_train.min())/(x_train.max()-x_train.min())
x_test = (x_test - x_test.min())/(x_test.max()-x_test.min())# # 6.KNN
print("开始进行KNN训练。。。")
knn_clf = KNeighborsClassifier(n_neighbors=4,algorithm='kd_tree',weights='distance')
start = time.time()
knn_clf.fit(x_train,y_train)
result = knn_clf.predict(x_test)
result = np.c_[range(1,len(result)+1),result.astype(int)]
df_result = pd.DataFrame(result,columns=['ImageID','Label'])
df_result.to_csv('../results.knn.csv',index=False)
end = time.time()
print("6.KNN耗时%.2f秒"%(end-start))# # 7.LR
print("开始进行LR训练。。。")
from sklearn.linear_model import LogisticRegression
start = time.time()
lr_clf = LogisticRegression(penalty='l1',C=0.2)
lr_clf.fit(x_train.astype("float"),y_train)
result = lr_clf.predict(x_test)
result = np.c_[range(1,len(result)+1),result.astype(int)]
df_result = pd.DataFrame(result,columns=["ImageId","Label"])
df_result.to_csv("../results_lr.csv",index=False)
end = time.time()
print("7.LR耗时%.2f秒"%(end-start))# # 8.RF
# # 随机森林是不需要对数据进行归一化处理
# # 8.1调参
from sklearn.ensemble import RandomForestClassifier
# # start = time.clock()
# # parameters = {'n_estimators': [10, 50, 100, 400], 'criterion': ['gini', 'entropy'], 'max_features': ['auto', 5, 10]}
# # rf_clf = RandomForestClassifier(n_estimators=400, n_jobs=4, verbose=1)
# # gs_clf = GridSearchCV(rf_clf, parameters, n_jobs=1, verbose=True)
# # gs_clf.fit(X_train_small.astype('int'), y_train_small)
# # for params, mean_score, scores in gs_clf.grid_scores_:
# #     print("%0.3f for %r" % (mean_score, params))
# # elapsed = (time.clock() - start)
# # print("Time used:", elapsed)
# # 8.2 RF
print("开始进行RF训练。。。")
start = time.time()
rf_clf = RandomForestClassifier(n_estimators=400,n_jobs=4,verbose=1,criterion="gini",max_features=10)
rf_clf.fit(x_train.astype("float"),y_train)
result = rf_clf.predict(x_test)
result = np.c_[range(1,len(result)+1),result.astype(int)]
df_result = pd.DataFrame(result,columns=['ImageId','Label'])
df_result.to_csv('../results_RF.csv',index=False)
end = time.time()
print("8.RF耗时%.2f秒"%(end-start))# 9.SVM
print("开始进行SVM训练。。。")
# # 9.1调参(略)
from sklearn.svm import SVC
# from sklearn.grid_search import GridSearchCV
# start = time.time()
# parameters = {'C':( 1, 2, 5, 10, 50) , 'gamma':[0.01, 0.02, 0.03, 0.04, 0.05]}
# svc_clf=SVC( kernel='rbf', verbose=True )
# gs_clf = GridSearchCV(svc_clf, parameters, n_jobs=1, verbose=True )
# gs_clf.fit( X_train_small.astype('float'), y_train_small )
# for params, mean_score, scores in gs_clf.grid_scores_:
#     print("%0.3f\tfor %r"  % (mean_score, scores.std() * 2, params))
# elapsed = (time.clock() - start)
# print("Time used:",elapsed)
# 9.2 SVM
start = time.time()
svc_clf = SVC(C=0.5,kernel='rbf',verbose=False,gamma=0.025)
svc_clf.fit(x_train.astype('float'),y_train)
result = svc_clf.predict(x_test)
result = np.c_[range(1,len(result)+1),result.astype(int)]
df_result = pd.DataFrame(result,columns=['ImageId','Label'])
df_result.to_csv('../results_SVM.csv',index=False)
end = time.time()
print("9.SVM耗时%.2f秒"%(end-start))
C:\ProgramData\Anaconda2\envs\py36\python.exe C:/Users/hjz/AI/project/02_lianxi/01_DigitRecognizer/01_ML/DigitRecognizer_ML.py
1.训练集大小: (42000, 785)
2.降维num: 154
3.降维后训练集大小: (42000, 154)
4.降维后测试集大小: (28000, 154)
5.PCA耗时6.79秒
开始进行KNN训练。。。
6.KNN耗时256.17秒
开始进行LR训练。。。
7.LR耗时42.33秒
开始进行RF训练。。。
[Parallel(n_jobs=4)]: Done  42 tasks      | elapsed:    5.8s
[Parallel(n_jobs=4)]: Done 192 tasks      | elapsed:   25.6s
[Parallel(n_jobs=4)]: Done 400 out of 400 | elapsed:   53.3s finished
[Parallel(n_jobs=4)]: Done  42 tasks      | elapsed:    0.0s
[Parallel(n_jobs=4)]: Done 192 tasks      | elapsed:    0.5s
[Parallel(n_jobs=4)]: Done 400 out of 400 | elapsed:    1.2s finished
8.RF耗时55.12秒
开始进行SVM训练。。。
9.SVM耗时534.41秒
Process finished with exit code 0
# -*- coding: utf-8 -*-
import xgboost as xgb
from sklearn.datasets import load_digits
from sklearn.cross_validation import train_test_split
from sklearn.metrics import accuracy_score
import pandas as pd
import numpy as npdef createDataSet():trainDataSet = pd.read_csv('../0_data/train.csv')testDataSet = pd.read_csv('../0_data/test.csv')trainDataSet = np.array(trainDataSet)testDataSet = np.array(testDataSet)trainData = trainDataSet[:, 1:len(trainDataSet)]trainLabels = trainDataSet[:, 0]testData = testDataSetreturn trainData, trainLabels, testDatadef getPredict(datas, labels):x_train, x_test, y_train, y_test = train_test_split(datas, labels, test_size = 0.1)param = {'booster':'gbtree','objective': 'multi:softmax', #多分类的问题'num_class':10, # 类别数,与 multisoftmax 并用'gamma':0.1,  # 用于控制是否后剪枝的参数,越大越保守,一般0.1、0.2'max_depth':12, # 构建树的深度,越大越容易过拟合'lambda':2,  # 控制模型复杂度的权重值的L2正则化项参数,参数越大,模型越不容易过拟合。'subsample':0.8, # 随机采样训练样本'colsample_bytree':0.7, # 生成树时进行的列采样'min_child_weight':5,# 这个参数默认是 1,是每个叶子里面 h 的和至少是多少,对正负样本不均衡时的 0-1 分类而言#,假设 h 在 0.01 附近,min_child_weight 为 1 意味着叶子节点中最少需要包含 100 个样本。#这个参数非常影响结果,控制叶子节点中二阶导的和的最小值,该参数值越小,越容易 overfitting。'silent':False,#设置成True无信息输出,'learning_rate': 0.05, # 学习率'seed':1000}xgb_train = xgb.DMatrix(data = x_train, label = y_train)xgb_val = xgb.DMatrix(data = x_test, label = y_test)xgb_test = xgb.DMatrix(x_test)watchlist = [(xgb_train, 'train'),(xgb_val, 'val')]model = xgb.train(params = param,dtrain = xgb_train,num_boost_round = 5000, #初始boost迭代次数evals = watchlist,early_stopping_rounds=100 #100轮后当模型基本没有提升时会提前结束)print('best best_ntree_limit:', model.best_ntree_limit)
#    保存模型model.save_model('1.model')y_pred = model.predict(xgb_test)print(accuracy_score(y_test, y_pred))trainData, trainLabels, testData = createDataSet()
getPredict(trainData, trainLabels)
xgbPredict = xgb.DMatrix(testData)
#训练完后可加载模型
model = xgb.Booster()
model.load_model('1.model')
y_pred = model.predict(xgbPredict)
print(y_pred)
#保存文件
f = open('submission_xgb.csv', 'w', encoding = 'utf-8')
f.write('ImageId,Label\n')
for i in range(len(y_pred)):f.write(str(i + 1) + ',' + str(int(y_pred[i])) + '\n')
f.close()
model 成绩 耗时
KNN 0.97282 258.80秒
LR 0.88603 44.04秒
RF-pca 0.94782 55.12秒
SVM 0.88375 534.41秒
XGBoost 0.97282 ~2000秒
RF-only 0.96796 ~50秒

Kaggle-Digit Recognizer-ML相关推荐

  1. [Kaggle] Digit Recognizer 手写数字识别(卷积神经网络)

    文章目录 1. 使用 LeNet 预测 1.1 导入包 1.2 建立 LeNet 模型 1.3 读入数据 1.4 定义模型 1.5 训练 1.6 绘制训练曲线 1.7 预测提交 2. 使用 VGG16 ...

  2. [Kaggle] Digit Recognizer 手写数字识别(神经网络)

    文章目录 1. baseline 2. 改进 2.1 增加训练时间 2.2 更改网络结构 Digit Recognizer 练习地址 相关博文: [Hands On ML] 3. 分类(MNIST手写 ...

  3. [Kaggle] Digit Recognizer 手写数字识别

    文章目录 1. Baseline KNN 2. Try SVC Digit Recognizer 练习地址 相关博文:[Hands On ML] 3. 分类(MNIST手写数字预测) 1. Basel ...

  4. Kaggle入门预测赛,手写数字识别Digit Recognizer,使用Kaggle kernel作答,F=0.98

    1.问题和描述 直接在kaggle左边的competition竞赛中搜索Digit Recognizer即可进入赛题页面: https://www.kaggle.com/c/digit-recogni ...

  5. 手写数字识别 Digit Recognizer

    手写数字识别 Digit Recognizer 在这次Machine Learning中,我做一个比较经典的手写数字识别的一个项目,巩固一下自己所学的知识,也带领大家进入神经网络的时代,神经网络可以在 ...

  6. Kaggle手写数字识别(Digit Recognizer)记录

    竞赛地址 https://www.kaggle.com/c/digit-recognizer 苦于学了cs231n和pytorch之后没有东西拿来练手,就去kaggle上找了一个入门竞赛,MNIST手 ...

  7. 我爱机器学习网机器学习类别文章汇总

    机器学习领域的几种主要学习方式 From Stumps to Trees to Forests KDD-2014 – The Biggest, Best, and Booming Data Scien ...

  8. 我爱机器学习--机器学习方向资料汇总

    转载:http://blog.csdn.net/shuimanting520/article/details/45748505 机器学习爱好者资料 机器学习领域的几种主要学习方式 From Stump ...

  9. 基于卷积神经网络的吸烟行为图像分类

    (1) 基于深度学习的图像分类基本步骤 第1步.通过一定的技术采集图像,对图像进行消噪.归一化.增强等预处理,以增强图像质量; 第2步.采用二维小波变换对增强后图像进行细化处理,将低频系数作为图像分类 ...

  10. 【竞赛相关】Kaggle活跃竞赛(12月汇总)

    圣诞节将至,为了方便大家顺利完成的竞赛.我们整理了现有Kaggle平台上的比赛信息,加油奥利给! Research赛题 HuBMAP: Hacking the Kidney 比赛链接:https:// ...

最新文章

  1. Intel汇编程序设计-高级过程(上)
  2. 【JAVA零基础入门系列】Day14 Java对象的克隆
  3. python[进阶] 6.使用一等函数实现设计模式
  4. [Java] 用java写的植物大战僵尸辅助
  5. OEM、ODM、OBM分别是什么?
  6. 记录一下把域名从阿里云服务商转入到华为云
  7. 8、实战项目-性能优化实战
  8. TensorFlow 2.9的零零碎碎(六)-模型训练和评价
  9. php int 32 64,php从32位升级到64位需要注意的几点
  10. 【Codeforces301E】Yaroslav and Arrangements
  11. 在线协作文档综合评测 :金山文档、腾讯文档、石墨文档
  12. STM32的标准库及其使用
  13. 第二次作业熟悉使用工具
  14. 《2021 胡润全球富豪榜》发布:38 岁的张一鸣首次进入中国前五
  15. nodemcu刷鸿蒙系统,mac开发nodemcu, 通过terminal刷固件
  16. 从开发零基础到登上Steam和Oculus:一个VR游戏开发者的自述
  17. Hbuilder创建app
  18. rhel6.8 oracle11g,RHEL6.8 Oracle RAC 11g R2 ASM磁盘在线扩容
  19. 将图片进行黑白灰处理
  20. 【C语言】函数调用的参数压栈(详解)

热门文章

  1. 计算机网络三级考试题型,计算机三级网络技术考试题型分析
  2. js正则匹配以{开头,以}结尾怎么写?
  3. c语言signed int与unsigned int的运算
  4. 获取字符串中所有的中文字符(正则表达式)
  5. 初学者入门HTML2
  6. gitlab自动同步github
  7. 【全奖博士】香港大学招收计算机视觉方向博士/博后/研究助理
  8. 企立方:为什么拼多多关键词搜不到自己的产品
  9. 关于Linux软件工程师的招聘要求
  10. 计算机不识别u盘咋办,电脑无法识别u盘如何修复,电脑不识别u盘怎么办