-
已完成
-
cnn的解法:score=0.99557
最终解法直接参考的片刻先前的做法,也就是第五个参考资料里面的解法。
参考资料:
-
Introduction to CNN Keras - Acc 0.997 (top 8%)
最终的解法基本是参考这个了,我是真的菜,在cnn代码使用方面没啥感觉,这个代码基本就是copy过来,自己完全都不知道该怎么去调参,看来,得抓紧时间把andrew的深度学习课程学习了才行。
-
各个解法整合:
失败了,使用投票法,将各个解法整合起来,最终结果反而更差了。
集成学习(也有叫特征融合)资料:
-
-
下一步计划
- 项目完结的文档整理,包括:项目流程经验总结、项目基本回顾
-
随笔
- 这一个月真的是经历了好多
-
已完成
-
svm参数调优:
import functions from sklearn.decomposition import PCA from sklearn.model_selection import cross_val_score from sklearn import svm from scipy import misc train_data, train_label, test_data = functions.read_data_from_csv() rate = 0.5 train_data = functions.shrink_img(train_data, rate) def genearte_classifier_model(): for C in range(3, 6): svm_model = svm.SVC(C=C) print('C={} gamma=default'.format(C)) yield svm_model def generate_pca_model(): for n_components in range(25, 36, 2): model = PCA(n_components=n_components, whiten=True) print('n_components={}\n'.format(n_components)) yield model for clf in genearte_classifier_model(): for pca_model in generate_pca_model(): pca_model.fit(train_data) new_train_data = pca_model.transform(train_data) scores = cross_val_score(clf, new_train_data, train_label, cv=10, verbose=True) score = scores.mean() print('scores={} \nscore={}'.format(scores, score))
收获如下:
-
一定要使用交叉验证,才能得到一个比较稳定、准确的结果。我之前的调试,都没有交叉验证,这次调试时,就发现参数情况不是特别稳定。
我现在常使用的就是:cross_val_score
-
感觉我算是天降之子吧,svm比起之前没有任何进展,还是之前的策略更优:
先将图片0.5倍缩放,然后降维到35,在使用svm,只设置C=4
至于为什么是0.5?我试了下,发现其他的都不是特别好,凭感觉就选了个最好?一切都是玄学吧。。。
-
-
新增函数:
def shrink_img(data, rate=0.5): tmp = [None for _ in data] for i, img in enumerate(data): img = img.reshape((28,28)) img = misc.imresize(img, rate) tmp[i] = img.flatten() data = np.array(tmp) return data
将图片缩放一定倍率
-
-
下一步计划
- 完成cnn的复习以及调优
-
随笔
- 这几天忙着工作的事情,总算是有个打底的了。这次找工作给自己的教训真是太深刻了。
-
已完成
-
实现一遍《python机器学习》第六章——模型评估与参数调优实战。当中具体涉及方法有:基于流水线的工作流(Pipeline);K折交叉验证(cross_val_score);使用学习曲线判定方差与偏差问题;使用网格搜索调优超参(GridSearchCV);通过嵌套交叉验证选择算法;不同的性能评价标准<混淆矩阵,ROC曲线>。
昨天在实现RF的时候并没有选择使用网格搜索。而且步长选择的也有问题。
-
-
下一步计划
-
今天把RF的调参过程熟悉,尝试得出一个最优解。
-
CNN相关东西不是很熟悉。了解,搭环境。
-
-
随笔
-
Kaggle上的Kernel分享了很多初学者,特别是EDA、Feature Engineering、Data visualization,挑选适合自己的实现熟悉流程很好。
-
pandas.info();pandas.corr();sns.heatmap();pandas.DataFrame.fillna;pandas.series.interpolate(根据不同方法插值);pandas.series.apply;pandas.set_index()设置索引;DataFram.pivot()重塑表格,按照一定格式、
-
-
已完成
-
数字识别逻辑回归解法:
感觉效果并没有多好,跑很长的时间得到一个好结果,我目前知道的最好的也就0.92,代码:
import functions from sklearn.decomposition import PCA from sklearn.model_selection import cross_val_score, train_test_split from sklearn.linear_model import LogisticRegression data, label, test_data = functions.read_data_from_csv() x_train, x_test, y_train, y_test = train_test_split(data, label, test_size=0.1, random_state=42) def genearte_classifier_model(): for penalty in ['l1', 'l2']: for C in [0.01, 0.1, 1, 10]: print('penalty={} C={}'.format(penalty, C)) yield LogisticRegression(penalty=penalty, C=C) def generate_pca_model(): for n_components in range(30, 40): model = PCA(n_components=n_components) print('n_components={}\n'.format(n_components)) yield model for clf in genearte_classifier_model(): for pca_model in generate_pca_model(): pca_model.fit(x_train) new_x_train = pca_model.transform(x_train) new_x_test = pca_model.transform(x_test) clf.fit(new_x_train, y_train) score = clf.score(new_x_test, y_test) print('score={}\n'.format(score))
资料看的比较多,顺带把线性回归也给看了:
-
RF随机森林解法
这个稍微好点,调参之后达到0.95371
import functions from sklearn.decomposition import PCA from sklearn.model_selection import cross_val_score, train_test_split from sklearn.linear_model import LogisticRegression from sklearn.ensemble import RandomForestClassifier data, label, test_data = functions.read_data_from_csv() x_train, x_test, y_train, y_test = train_test_split(data, label, test_size=0.1, random_state=42) def genearte_classifier_model(): oob_score = True random_state = 10 criterion = 'gini' for n_estimators in [300, 400, 500, 600]: print('n_estimators={}'.format(n_estimators)) yield RandomForestClassifier(criterion=criterion, n_estimators=n_estimators, oob_score=oob_score, random_state=random_state) def generate_pca_model(): for n_components in [30, 33, 36, 39]: model = PCA(n_components=n_components) print('n_components={}\n'.format(n_components)) yield model for clf in genearte_classifier_model(): for pca_model in generate_pca_model(): pca_model.fit(x_train) new_x_train = pca_model.transform(x_train) new_x_test = pca_model.transform(x_test) clf.fit(new_x_train, y_train) score = clf.score(new_x_test, y_test) print('score={}\n'.format(score))
参考资料:
-
-
下一步计划
- 复习svm
- 完善svm解法
-
随笔
- 前几天准备一个面试耽搁了些时间,虽然最后还是凉了。
-
已完成
- 整理了机器学习项目一般操作流程(未完)
-
下一步计划
- 将这个莫烦Python上的内容系统的学习一遍
-
随笔
- 这两天乱七八糟的事情太多了 严重影响了学习进度
-
已完成
-
PCA+SVM score0.98442 参考kernel
-
学会构造函数并可视化PCA <总体方差与贡献方差>
-
-
下一步计划
-
研究特征工程的细节
-
模型参数调剂的细节 这两个任务很庞大 不是短期能搞好的
-
-
随笔
-
<机器学习中如何处理缺失数据>???
用平均值、中值、分位数、众数、随机值等替代。效果一般,因为等于人为增加了噪声。
-
数据的归一化(normalization)。常用最小-最大缩放进行有效规范化。<sklearn.preprocessing.MinMaxScaler>
标准化(standardization).这是一个更加实用的方法。很多线性模型(LR,SVM)在对它们进行训练的最初阶段,即权重初始化阶段,可将其值设定0或是趋近于0的随机极小值。通过标准化我们可以将特征列的均值设为0,方差为1,使得特征列的值呈正态分布,这更便于权重的更新。此外,标准化方法保持了异常值所蕴含的有用信息,并且使算法受到这些值的影响较小;另外为了使正则化起作用,需要确保所有特征的衡量标准保持统一。<sklearn.preprocessing.StandardScaler>
决策树模型与随机森林无需特征缩放。
-
-
已完成
-
看了下:
这篇文章就只是讲到两种距离计算方式,而且感觉也不怎么用得上。
这两天安排的内容,beyes分类和这个,感觉其实都没啥用,平白浪费时间了。下一次制定计划时,还是先认真审视一下才行。
-
刷了51nod 4道基础题,10道1级题,顺便复习了下排序算法,为笔试做准备。
好久没有手写过快排代码,还是生疏了点。
-
-
下一步计划
- LR解法:http://blog.csdn.net/Dinosoft/article/details/50734539
- 继续刷51nod,准备面试
-
随笔
- 今天怠惰了啊。。。。
-
已完成
《基于朴素贝叶斯K近邻的快速图像分类算法》这篇文章,将bayes用于图像分类,感觉有点偏门。
在以下两个链接中,有sklearn中贝叶斯分类器的使用:
实际使用之后,发现效果确实不咋地,连0.9都达不到。
import functions from sklearn.decomposition import PCA from sklearn.model_selection import cross_val_score, train_test_split from sklearn.naive_bayes import GaussianNB data, label, test_data = functions.read_data_from_csv() x_train, x_test, y_train, y_test = train_test_split(data, label, test_size=0.1, random_state=42) def genearte_classifier_model(): yield GaussianNB() def generate_pca_model(): for n_components in range(30, 35): model = PCA(n_components=n_components) print('n_components={}\n'.format(n_components)) yield model for clf in genearte_classifier_model(): for pca_model in generate_pca_model(): pca_model.fit(x_train) new_x_train = pca_model.transform(x_train) new_x_test = pca_model.transform(x_test) clf.fit(new_x_train, y_train) score = clf.score(new_x_test, y_test) print('score={}\n'.format(score))
n_components=30 score=0.8523809523809524 n_components=31 score=0.8514285714285714 n_components=32 score=0.8552380952380952 n_components=33 score=0.8561904761904762 n_components=34 score=0.8580952380952381
- 刷51nod基础题目20道,准备笔试
-
下一步计划
-
继续刷51nod,准备笔试
-
基于图像形状的一种比较漂亮的分类算法 链接:http://blog.csdn.net/lishuhuakai/article/details/53573241
-
-
随笔
-
已完成
-
看了几个项目的开发流程对特征工程部分存有疑惑
-
向大佬请教了学习方法 在实践中学习 哪里不会就补充哪里的知识
-
学会了如何合pr
-
-
下一步计划
- 补充特征工程相关知识
-
随笔
-
已完成
-
实现PCA+KNN。score:0.97528 <学习kaggle别人的Kernel 以及余洋的过程>
-
实现迭代器主成分个数与其方差率(explained_variance_ratio_)的关系并作可视化。训练集上采用交叉验证分离数据(test_size=0.3),并在KNN上迭代找到一个最佳的主成分数(22),这个数量和最终的测试集上用的还是有出入的。
-
接触并使用函数:pandas.drop; pandas.ilot; seaborn.countplot; pandas.Series.value_counts; pandas.describe
-
散点图、折线图、热源图使用与接触但是里面的参数不熟练。
-
-
下一步计划
-
PCA+SVM
-
复习RF与LR知识
-
回顾别人的代码思路
-
-
随笔
-
Pandas进行数据分析。讲了很多分析方法,包括缺失值处理,查看数据的统计特性。另外此文章所在专栏总结的内容也有很多干货。
-
seaborn能做出很具有吸引力的图.应该把Seaborn视为matplotlib的补充,而不是替代物。
-
其实现在根本不是缺少资源。缺少的是专一与坚持的心。
-
-
已完成
- 使用CNN,准确率0.9929
-
下一步计划
- 进一步优化
-
代码
#!/usr/bin/env python
# _*_coding:utf-8_*_
from tensorflow.examples.tutorials.mnist import input_data
import tensorflow as tf
import os
MODEL_SAVE_PATH = './CNN_MODEL/'
MODEL_NAME = 'MODEL.ckpt'
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
sess = tf.InteractiveSession()
def weight_variable(shape):
inital = tf.truncated_normal(shape, stddev=0.1)
return tf.Variable(inital)
def bias_variable(shape):
inital = tf.constant(0.1, shape=shape)
return tf.Variable(inital)
def conv2d(x, W):
return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME')
def max_pool_2x2(x):
return tf.nn.max_pool(x, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')
x = tf.placeholder(tf.float32, [None, 784]) # 特征
y_ = tf.placeholder(tf.float32, [None, 10]) # 真实的label
x_image = tf.reshape(x, [-1, 28, 28, 1])
W_conv1 = weight_variable([5, 5, 1, 32])
b_conv1 = bias_variable([32])
h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1)
h_pool1 = max_pool_2x2(h_conv1)
W_conv2 = weight_variable([3, 3, 32, 64])
b_conv2 = bias_variable([64])
h_conv2 = tf.nn.relu(conv2d(h_pool1, W_conv2) + b_conv2)
h_pool2 = max_pool_2x2(h_conv2)
W_fc1 = weight_variable([7 * 7 * 64, 1024])
b_fc1 = bias_variable([1024])
h_pool2_flat = tf.reshape(h_pool2, [-1, 7 * 7 * 64])
h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat, W_fc1) + b_fc1)
# Dropout层
keep_prob = tf.placeholder(tf.float32)
h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob)
# 连接Softmax层
W_fc2 = weight_variable([1024, 10])
b_fc2 = bias_variable([10])
y_conv = tf.nn.softmax(tf.matmul(h_fc1_drop, W_fc2) + b_fc2)
cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y_conv), reduction_indices=[1]))
train_step = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)
correct_prediction = tf.equal(tf.argmax(y_conv, 1), tf.argmax(y_, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
saver = tf.train.Saver()
with tf.Session() as sess:
tf.global_variables_initializer().run()
for i in range(20000):
batch = mnist.train.next_batch(50)
if i % 100 == 0:
train_accuracy = accuracy.eval(feed_dict={x: batch[0], y_: batch[1], keep_prob: 1.0})
if train_accuracy == 1:
saver.save(sess, os.path.join(MODEL_SAVE_PATH, MODEL_NAME), global_step=i)
print("step %d, training accuracy %g" % (i, train_accuracy))
train_step.run(feed_dict={x: batch[0], y_: batch[1], keep_prob: 0.5})
print("test accuracy %g" % accuracy.eval(feed_dict={x: mnist.test.images, y_: mnist.test.labels, keep_prob: 1.0}))
-
已完成
- 拜读很多大佬的代码,学习怎样编写掉包的python代码,但是对sk-learn的文档还是不熟悉。
-
下一步计划
- 看看文档,继续看代码。
-
已完成
-
knn+pca的调参测试: score=0.975
import functions from sklearn.decomposition import PCA from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA from sklearn.model_selection import cross_val_score, train_test_split from sklearn.neighbors import KNeighborsClassifier data, label, test_data = functions.read_data_from_csv() x_train, x_test, y_train, y_test = train_test_split(data, label, test_size=0.1, random_state=42) def genearte_knn_model(): weights = 'distance' for n_neighbors in range(3, 7): for metric in ['euclidean', 'manhattan']: model = KNeighborsClassifier(n_neighbors=n_neighbors, weights=weights, metric=metric) print('n_neighbors={}\n weights={}\n metric={} \n'.format(n_neighbors, weights, metric)) yield model def generate_pca_model(): for n_components in range(30, 33): model = PCA(n_components=n_components) print('n_components={}\n'.format(n_components)) yield model for knn_model in genearte_knn_model(): for pca_model in generate_pca_model(): pca_model.fit(x_train) new_x_train = pca_model.transform(x_train) new_x_test = pca_model.transform(x_test) knn_model.fit(new_x_train, y_train) score = knn_model.score(new_x_test, y_test) print('score={}\n'.format(score))
结果统计:
- knn的n_neighbors的有效区间在[3, 5];
- knn的weights选取distance效果较好
- pca降维,以30位分界线,30以下(不包括30),分类效果比较差,30以上,比较好,区别不是特别大。
-
knn+lda:score=0.80-0.90
import functions from sklearn.decomposition import PCA from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA from sklearn.model_selection import cross_val_score, train_test_split from sklearn.neighbors import KNeighborsClassifier data, label, test_data = functions.read_data_from_csv() x_train, x_test, y_train, y_test = train_test_split(data, label, test_size=0.1, random_state=42) def genearte_knn_model(): weights = 'distance' for n_neighbors in range(1, 7): for metric in ['euclidean', 'manhattan']: model = KNeighborsClassifier(n_neighbors=n_neighbors, weights=weights, metric=metric) print('n_neighbors={}\n weights={}\n metric={} \n'.format(n_neighbors, weights, metric)) yield model def generate_lda_model(): for n_components in range(5, 10): model = LDA(n_components=n_components) print('n_components={}\n'.format(n_components)) yield model for knn_model in genearte_knn_model(): for lda_model in generate_lda_model(): lda_model.fit(x_train, y_train) new_x_train = lda_model.transform(x_train) new_x_test = lda_model.transform(x_test) knn_model.fit(new_x_train, y_train) score = knn_model.score(new_x_test, y_test) print('score={}\n'.format(score))
其效果基本等同于LDA分类的效果。
-
LLE,跑不出来
import functions from sklearn.decomposition import PCA from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA from sklearn.model_selection import cross_val_score, train_test_split from sklearn.neighbors import KNeighborsClassifier from sklearn.manifold import LocallyLinearEmbedding as LLE data, label, test_data = functions.read_data_from_csv() x_train, x_test, y_train, y_test = train_test_split(data, label, test_size=0.1, random_state=42) def genearte_knn_model(): weights = 'distance' for n_neighbors in range(1, 7): for metric in ['euclidean', 'manhattan']: model = KNeighborsClassifier(n_neighbors=n_neighbors, weights=weights, metric=metric) print('n_neighbors={}\n weights={}\n metric={} \n'.format(n_neighbors, weights, metric)) yield model def generate_lle_model(): n_neighbors = 5 for n_components in range(2, 6): model = LLE(n_neighbors=n_neighbors, n_components=n_components) print('lle:\n n_neighbors={}\n n_components={}\n'.format(n_neighbors, n_components)) yield model for knn_model in genearte_knn_model(): for lle_model in generate_lle_model(): lle_model.fit(x_train) new_x_train = lle_model.transform(x_train) new_x_test = lle_model.transform(x_test) knn_model.fit(new_x_train, y_train) score = knn_model.score(new_x_test, y_test) print('score={}\n'.format(score))
我看到一篇博客讲到,LLE算法学习的流形只能是不闭合的,那可能是我用错了,LLE根本不适合数字图片。
-
-
下一步计划
- 按照README-V2的规划,完成基于朴素贝叶斯K近邻的快速图像分类算法。
-
随笔
- 看数学原理看的头痛,暂时只要会用就好了。
-
已完成
-
学习了README语法
-
下一步计划
-
发现一个博客Gain很多干货 后期可以到这里来查阅
-
再多看一点kaggle比赛项目的开发流程 学习经验
-
-
随笔
- 越学习越发现自己知识的贫瘠 这也许就是努力的理由吧
-
已完成
-
用scikit-learn学习主成分分析(PCA)。自己在用的时候出现了一些问题,还没有彻底熟悉这个方法。熟悉后,补一下这边遇到的坑。
-
Sklearn-train_test_split随机划分训练集和测试集,与之匹配的还有cross_val_score的使用。
-
做了优化。score:0.97185,Ranking: 1247/1920
-
-
下一步计划
- 学习他人在Kernel上分享的思路。尤其对于数据预处理。我这边根本没有涉及对缺失值处理,查看分布这些操作。
-
随笔
-
已完成
- 在kaggle上看了几篇kernal ,在machine learning in action 中看到相关knn代码。了解优化操作,尽量跟大佬脚步。
-
下一步计划
-
随笔
-
已完成
-
下一步计划
-
详细阅读kaggle数字识别V1流程和代码
-
随笔
1.已完成
1.今天在小伙伴的帮助下对整个github流程有了一定的了解,知道该怎么操作了
2.上网看了一些关于github的操作博客,会创建仓库,上传代码到自己的仓库了
2.下一步计划
1.学习git的知识,熟悉命令操作
2.上网看关于数字识别的相关博客,好好学习别人的思路
3.随笔
1.很喜欢这个组织,一上来什么都不懂,小伙伴直接远程教我操作
2.希望接下来自己可以为这个组织贡献一份力
-
已完成
- 终于弄会了GitHub,看了SVM。
-
下一步计划
-
随笔
-
已完成
-
《机器学习实战》第七章 Adaboost元算法提高分类性能
这个链接里面讲得还不错,数据演示的还行。
-
这篇链接讲了一些图片操作,例如旋转、缩放之类的,对我们现在的图片处理感觉很有用啊。
-
干货整理的太好了,以后要使用pandas分析数据,可以直接先来这里查字典了。
-
-
下一步计划
- 把《高等代数》、《数学分析》快速的过一遍
- kaggle数字识别的一些基础操作,写一写
-
随笔
-
已完成
-
初次提交1329/1902
-
PCA数学原理
-
-
下一步计划
-
阅读sklearn中PCA文档,实现Demo。实现手写数字识别原始数据的降维。
-
尝试使用RF模型完成一次<预计结果会好>。
-
-
随笔
- 其它也不能停呃。数据结构继续看。
-
已完成
-
完成了github相关操作复习
-
看了线性代数 学习了矩阵的运算 逆矩阵相关知识
-
修改了昨天日报的格式 并补充了kaggle-learn上machine learnign的超链接(强烈推荐像我一样的新手阅读)
-
-
下一步计划
-
查找国外优秀微积分、线性代数、概率论教材 为后续阅读作准备
-
查阅knn相关资料
-
-
随笔
- 真心觉得老外写的书、教程非常nice 写的非常通俗易懂 写的让你有兴趣阅读
-
已完成
-
在kaggle learn上刷完了machine learning Leve1 初步了解了决策树、随机森林算法
-
接触了pandas、sklearn框架,并学习了几个简单函数
-
-
下一步计划
-
学习二分类、数据降维知识
-
复习git知识
-
-
随笔
-
很早以前就听说加入开源组织能够学到很多,如今我的亲身经历告诉我这是真的。自从昨天加入这个项目,我接触到了很多大牛,也学到了一些前辈们的经验。
-
终于能够静下心来阅读英文文档了。
-
- 已完成
- 《高等代数》前三章
- 《机器学习实战》前两章
- 下一步计划
- 随笔
-
已完成
- 复习《统计学习方法》第三章K近邻法。重新审视个人CSDN博客以前照着《机器学习实战》实现的代码。
- 阅读Sklearn中 Nearest Neighbors官方文档¶。
- 借鉴别人代码,初次直接调包(KNeighborsClassifier、Cross-validation)实现手写数字识别。Score为0.947。但是运行时间接近1200s?有提高空间吗?
-
下一步计划
- 研究一下数据集,对特征作进一步优化or抽取。对于方法参数作进一步调整,尝试提高Score值。
- 学习降维知识,尤其是针对图片的?
-
随笔
- 昨天晚上Git出现了问题,不能PR,提示Time Out。Stackoverflow之找出原因并解决(因为使用了代理服务器)。
- 断断续续自我约束能力还是不行。
-
已完成
1.v2版本的规划
-
下一步计划
-
随笔
-
已完成
- 学习数据降维
-
在数字识别上应用数据降维
-
随笔