Skip to content
This repository has been archived by the owner on Jul 7, 2023. It is now read-only.
/ PRML-HW Public archive

Computer programming homework for PRML course of Tsinghua Prof. Xuegong Zhang

License

Notifications You must be signed in to change notification settings

Enigmatisms/PRML-HW

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

24 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PRML-HW

Computer programming homework for PRML course of Tsinghua Prof. Xuegong Zhang


10.1 HW2

完成了FDL的实现以及2D可视化,完成了Perceptron/Logistic Regression的使用(基于scikit-learn)

  • Perceptron以及Logistic Regression的最优参数搜索
  • Logistic Regression的ROC-AUC曲线绘制
  • feature importance的计算(基于随机森林)

本地复现本作业的结果时请执行以下代码,检查环境是否齐全。并且注意,本作业是在Linux平台上进行的实现,内部有些路径("/")在windows上可能无法解析,请windows复现结果者自行解决。

python3 -m pip install -r requirements.txt

除了FDL之外,其余的两个实验均使用Jupyter Notebook,这里不再赘述.ipynb的执行方法,欲查看FDL实验的结果,请执行:

cd exe2/
python3 ./fdl.py

10.4 HW3

​ 调用sklearn中实现的KNN算法,采取了三种不同的策略:

  • KNN default setting (由sklearn库定义,例如其n_neighbors = 5)
  • KNN,并且进行GridSearchCV
  • KNN default setting,但输入使用PCA降维

​ 代码中目前只保留了前两种方案,如果要测试PCA降维,请将代码的25-27行解注释:

# pca = PCA(n_components = 16)
# train_set = pca.fit_transform(train_set, train_label)
# test_set = pca.fit_transform(test_set, test_label)

​ 如果要运行代码,此处有三种可能的运行选择 (首先得cd exe3/):

python3 ./knn_gridsearch.py 0
python3 ./knn_gridsearch.py 1
python3 ./knn_gridsearch.py

​ 第一种运行方式:代表使用默认参数运行

​ 第二种运行方式:代表使用Grid Search结果参数运行

​ 第三种运行方式:代表进行Grid Search

​ 每一种方式结束后,都会执行k=3-49n_neighbors对训练、测试集精度影响分析的绘图。


10.8 HW4

​ 运行MLP代码,需要使用Pytorch(基于pytorch的实现),如果您环境装的好(Pytorch的wheel CUDA版本与本地CUDA版本一致),那么应该可以使用Nvidia APEX混合精度加速库。则无需修改,直接使用如下方法运行:

cd exe4/
mkdir check_points/
python3 ./custom_mlp.py -s

​ 如果您无法使用APEX加速库,则去掉-s flag(本实现不支持native amp,则不会进行任何混合精度加速)。


10.15 HW5 (simple SVM)

​ SVM对偶问题求解,依赖库:pytorch(CPU版本即可),matplotlib。运行方法如下:

cd exe5/
python3 ./svm_auto.py

10.21 HW5 - 2 (SVM package)

​ SVM(调用sklearn库进行了三种不同kernel函数的实验)。本代码并不提供简单的kernel函数切换,如果需要切换kernel,请自行修改代码中的(42-46)行:

parameters = {'C': 0.5,
        'kernel' : 'poly',
        'degree': 3,
        'gamma': 'auto'
}

​ 如果需要测试grid search,将if __name__ == "__main__"块中的svm_test()替换为grid_search_params()。使用如下方式运行:

cd exe5/
python3 ./svm_sklearn.py

10.31 HW6 (Feature Selection & Extraction & LASSO)

​ 在exe6/文件夹中包含了两个文件:

knn_gridsearch.py --------- 包含了PCA-based feature extraction\PCA-KNN\KNN Grid Search\LASSO\LASSO Grid Search
pca.py -------------------- 包含了自己实现的PCA算法

​ 运行:

cd exe6/
python3 ./knn_gridsearch.py				  // 什么都不加:lasso grid search
python3 ./knn_gridsearch.py	0或1			  // 进行knn测试
python3 ./knn_gridsearch.py	2及以上		// 进行lasso测试

11.6 HW7 (Random Forest)

​ 在exe7/文件夹中包含了两个文件:

rf_exps.py --------- 直接使用参数运行Random Forest
rf_gridsearch.py -------------------- 包含了随机森林参数搜索代码

​ 运行:

cd exe7/
python3 ./rf_exps.py			// 测试OOB / bootstrap 等参数
python3 ./rf_gridsearch.py		// 测试随机森林参数搜索

11.13 HW8 (Naive Bayes Classifier)

​ 在exe8/文件夹中包含了两个文件:

nb.py --------- 包含了参数搜索与Navie Bayes分类器的测试(包含minimal risk classifier)
distribute.py ---------- 参数的概率分布可视化

​ 运行:

cd exe7/
python3 ./nb.py				// 测试Navie Bayes分类器
python3 ./distribute.py		// 测试参数概率分布可视化

​ 其中,参数概率分布可视化如果要实验前五种(importance最高的feature)feature,可以修改最后一行的解包:

histogram(*MAIN_5)			// 改为MAIN_1或者其他几种feature这里的数字代表了importance排序

12.4 HW9 (Clustering & PCA)

exe9/文件夹中包仅包含了一个文件:

mnist_clustering.py --- exercise 9全部代码

​ 此代码有额外依赖项(除了常用的sklearnmatplotlib, numpy之外):mlxtend。如果需要安装,请使用以下方式进行安装:

pip3 install mlxtend

​ 需要测试不同的实验方式,则修改mnist_clustering.py中的参数:

num_clusters = 2				# 聚类簇数量
examples = 6				    # 每个簇用于可视化的图片数量	 
use_pca = True				    # 是否使用PCA
# 以及第31行
pca = PCA(n_components = 100)	   # 修改主成分数量
# 以及第61行
clustered = pca_kmeans_clustering(images, num_clusters, examples, scree_plot = True)
# 最后一个参数(scree_plot),如果为true则会绘制scree_plot

About

Computer programming homework for PRML course of Tsinghua Prof. Xuegong Zhang

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published