20200221;
1.做分类问题的时候,给定你标签,你想知道每一类标签的出现频数,可以使用这个函数:np.bincount()。
如果想分析一下数据样本是否均衡的时候,可以考虑这种操作,代码十分简明。
2.
当需要查看数据集中两个Key对应的数据是否是统一数据转化而来的时候:
输入:from sklearn.datasets import load_digits
digits=load_digits()
digits.keys()
n_samples,n_features=digits.data.shape
print((n_samples,n_features))print(digits.data.shape)
print(digits.images.shape)import numpy as np
print(np.all(digits.images.reshape((1797,64))==digits.data))输出:(1797, 64)
(1797, 64)
(1797, 8, 8)
True
在这个数据集中,其实对于每一张图像image中是8*8的,而data是1*64的就是了。
20200308:
3.显示进度条的神器
引入一个包:tqdm(anaconda自带)
git链接:https://github.com/tqdm/tqdm
这个包是用来显示进度条的,很漂亮,使用很直观(在循环体里边加个tqdm),而且基本不影响原程序效率。这样在写运行时间很长的程序时,可以用到。
使用方式见下图:
在循环体内套一个tqdm(),就可以实现每执行一遍循环,进度条就会前进1,十分直观。
但是有个问题,如果循环里面要进行输出的话,就有点难受了。
import time
from tqdm import tqdm
for i in tqdm(range(20)):time.sleep(0.5)print('hello',i)
参考链接:https://spaces.ac.cn/archives/3902
20200403
在读入图片进行操作的时候,需要预处理,一般都先预处理到RGB格式,因为有时会给定的原始图片未经清洗,所以有可能是'P' mode 或者‘RGBA’ mode,
所以常见套路:
for i in range(100):img = Image.open(train_image_path[i]).convert("RGB")img = img.resize((256,256),Image.ANTIALIAS)X_train[i] = np.array(img)
参考链接:https://blog.csdn.net/qiusuoxiaozi/article/details/79556605
20200403
对数据进行处理时,或者将numpy扩充维数时,(比如你要导入1000张图片),要注意首先要检查1000张图片的shape是否一样。
并且,先用list去append,最后再转numpy,速度会非常慢,所以最好的办法有如下两个:
1. 用numpy的np.concatenate函数
2. 直接提前开好numpy数组,然后直接赋值即可,比如下面这段程序:
常见套路:
import matplotlib.pyplot as plt
from PIL import Image
import numpy as np
import glob
train_image_path = glob.glob('cat1000/*.jpg')
X_train = np.zeros((1000,256,256,3))for i in range(100):img = Image.open(train_image_path[i]).convert("RGB")img = img.resize((256,256),Image.ANTIALIAS)X_train[i] = np.array(img)
参考链接:https://blog.csdn.net/qq_31785005/article/details/78460757
20200425
进行数据预处理的时候,要注意数据类型的问题,比如tf.image.resize_images函数,在参数的选择上,推荐选择双线性插值,因为双三次差值可能会出现取值范围不在0-255范围内的情况。
https://blog.csdn.net/u011583927/article/details/103307473
20200426
注意使用PCA降维的时候,要先标准化再进行降维!
比如可以直接用sklearn的
from sklearn.preprocessing import StandardScaler
然后StandardScaler().fit(数据集) 就完事了。
20200426
做分类时:
kNN算法在确定分类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。kNN算法在类别决策时,只与极少量的相邻样本有关。由于kNN算法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,kNN方法较其他方法更为适合。
https://www.cnblogs.com/ljhdo/p/10600613.html
20200426
绘图常用:
plt.xlim、plt.ylim 设置横纵坐标轴范围
plt.xlabel、plt.ylabel 设置坐标轴名称
plt.xticks、plt.yticks设置坐标轴刻度
另外也可以使用plt.axis([xmin, xmax, ymin, ymax])确定坐标值的范围
# 设置刻度字体大小
plt.xticks(fontsize=20)
plt.yticks(fontsize=20)
# 设置坐标标签字体大小
ax.set_xlabel(..., fontsize=20)
ax.set_ylabel(..., fontsize=20)
https://blog.csdn.net/htuhxf/article/details/82986440
https://blog.csdn.net/helunqu2017/article/details/78736415
对于分类问题常用来做结果分析:
混淆矩阵:
n类问题,则生成n*n的矩阵
20200426
zip进行打包的话,输出一次之后就自动解除打包了,如需第二次使用,还需再zip一次。
20200506
用conda安装包时,可以直接:(假设要安装cuda和cudnn)
20200506
sourse可以省略。
20200512
从某文件夹中读取所有图片常用操作:
image_paths=[os.path.join(path, f) for f in os.listdir(path)]
或者用glob.glob也是可以的
文件路径相关操作:
os.path.split(image_path)[-1].split(".")[-1]
如果im.read(),读入了一张空图或者报错,考虑是不是绝对路径中出现了中文。或者是斜杠反斜杠问题。
20200514
cv2.resize()函数参数比较容易出错。
正常来说img.shape = (h , w)
大师resize的时候传入的参数需要是(w,h)。详情看下面的例子:
import cv2
from scipy import miscimg = misc.imread('001.jpg')
print(img.shape)
img2 = cv2.resize(img, (30, 40), interpolation=cv2.INTER_CUBIC)
print(img2.shape)
img3 = cv2.resize(img, (40, 30), interpolation=cv2.INTER_CUBIC)
print(img3.shape)输出:
(250, 250, 3)
(40, 30, 3)
(30, 40, 3)
参考链接:https://blog.csdn.net/FortiLZ/article/details/81396566
20200517
在进行样本归一化的时候,要注意训练集归一化了,那么测试集也要归一化,且测试集要用训练集的均值,方差,最大值最小值进行归一化。原因很好解释,因为你在预测的时候,其实是不知道测试集的均值等这些属性的