From 185e7d682822564b81990dab7445902e14c2c5eb Mon Sep 17 00:00:00 2001
From: Sean Orzolek <44307229+smo216@users.noreply.github.com>
Date: Fri, 25 Oct 2019 18:01:52 -0400
Subject: [PATCH] HP17 dataset with DASK and PCM
---
..._Sliced_DASK_Image_Analysis_10_25_19.ipynb | 1318 +++++++++++++++++
1 file changed, 1318 insertions(+)
create mode 100644 Machine_Learning_Final_Project_Sliced_DASK_Image_Analysis_10_25_19.ipynb
diff --git a/Machine_Learning_Final_Project_Sliced_DASK_Image_Analysis_10_25_19.ipynb b/Machine_Learning_Final_Project_Sliced_DASK_Image_Analysis_10_25_19.ipynb
new file mode 100644
index 0000000..c819d57
--- /dev/null
+++ b/Machine_Learning_Final_Project_Sliced_DASK_Image_Analysis_10_25_19.ipynb
@@ -0,0 +1,1318 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 0,
+ "metadata": {
+ "colab": {
+ "name": "Machine Learning Final Project Sliced DASK Image Analysis 10-25-19.ipynb",
+ "provenance": [],
+ "collapsed_sections": [],
+ "machine_shape": "hm",
+ "include_colab_link": true
+ },
+ "kernelspec": {
+ "name": "python3",
+ "display_name": "Python 3"
+ }
+ },
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "view-in-github",
+ "colab_type": "text"
+ },
+ "source": [
+ ""
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "VTFUhEmITcxd",
+ "colab_type": "code",
+ "outputId": "b33033d8-54d6-40ee-94e7-438d6d8739e8",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 51
+ }
+ },
+ "source": [
+ "#load multiple data\n",
+ "\"\"\"Utilize histogram matching to normalize images? https://scikit-image.org/docs/stable/auto_examples/transform/plot_histogram_matching.html#sphx-glr-auto-examples-transform-plot-histogram-matching-py\"\"\"\n",
+ "## For Image portion\n",
+ "\n",
+ "from google.colab import drive\n",
+ "drive.mount('/content/gdrive')\n",
+ "from PIL import Image\n",
+ "from pylab import *\n",
+ "# importing os module \n",
+ "import os \n",
+ "from skimage import io\n",
+ "import matplotlib.pyplot as plt\n",
+ "import numpy as np\n",
+ "from skimage.util import img_as_ubyte\n",
+ "from skimage import data\n",
+ "from skimage.exposure import histogram\n",
+ "import skimage\n",
+ "import pandas as pd\n",
+ "from pandas import read_csv\n",
+ "import h5py\n",
+ "\n",
+ "Comppath=\"//content//gdrive//My Drive//PhD casting project//Summary files//Compositions.csv\"\n",
+ "SUMDAT=pd.read_csv(Comppath)\n",
+ "#print(SUMDAT)\n",
+ "\n",
+ "from skimage import io\n",
+ "train_data_path=\"//content//gdrive//My Drive//PhD Image Processing//Python HP//HP-17-Test\"\n",
+ "os.chdir(train_data_path)\n",
+ "import dask.array as da\n",
+ "f = h5py.File('HP17.h5py')\n",
+ "dset=f['HP17']\n",
+ "list(f.keys())\n",
+ "dset.shape\n",
+ "dset.dtype\n",
+ "imdat = da.from_array(dset,chunks=dset.shape)#currently no chunks\n",
+ "imdatda = da.from_array(dset,chunks=(10000,20,20))#10000\n",
+ "print(imdatda)\n",
+ "\n"
+ ],
+ "execution_count": 23,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Drive already mounted at /content/gdrive; to attempt to forcibly remount, call drive.mount(\"/content/gdrive\", force_remount=True).\n",
+ "dask.array\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "9w3l_bfmja9l",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "source": [
+ "\"\"\"Split dataset into Test/Train\"\"\"\n",
+ "print(type(imdat))\n",
+ "L=len(imdat)\n",
+ "#plt.imshow(cropdcol1[6,:,:], cmap=plt.cm.gray)\n",
+ "imdat.shape\n",
+ "\n",
+ "split=round(L*.7) #70% of dataset for training vs testing\n",
+ "train_dataset,test_dataset =imdatda[:split,:,:],imdatda[split:,:,:]\n",
+ "#print(train)\n",
+ "n_samplestr, htr, wtr = train_dataset.shape\n",
+ "d2_train = train_dataset.reshape((n_samplestr,htr*wtr))\n",
+ "\n",
+ "test_dataset.shape\n",
+ "n_sampleste, hte, wte = test_dataset.shape\n",
+ "d2_test = test_dataset.reshape((n_sampleste,hte*wte))\n",
+ "\n",
+ "test_dataset.shape\n",
+ "\n",
+ "\n",
+ "nsamples, nx, ny = imdat.shape\n",
+ "print(nx)\n",
+ "print(ny)\n",
+ "d2_imdat = imdat.reshape((nsamples,nx*ny))\n",
+ "print(d2_imdat.shape)\n",
+ "\n",
+ "nsamplesda, nxda, nyda = imdatda.shape\n",
+ "print(nxda)\n",
+ "print(nyda)\n",
+ "d2_imdatda = imdatda.reshape((nsamplesda,nxda*nyda))\n",
+ "print(d2_imdatda.shape)\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "#now what?\n",
+ "\n",
+ "#from dask_ml.preprocessing import StandardScaler\n",
+ "#scaler = StandardScaler()\n",
+ "#print(scaler.fit(d2_imdat))\n",
+ "#StandardScaler(copy=True, with_mean=True, with_std=True)\n",
+ "#d2scaledat=scaler.transform(d2_imdat[0])\n",
+ "#print(scaler.transform([[2, 2]]))\n"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "s7LL3FRgFVCX",
+ "colab_type": "code",
+ "outputId": "e1410973-9e44-4e78-c289-6775d4ea046f",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 369
+ }
+ },
+ "source": [
+ "from skimage import filters\n",
+ "iter_thresholds3 = []\n",
+ "num=np.random.randint(0,500)\n",
+ "cell=imdat[num].compute()\n",
+ "opt_threshold3 = filters.threshold_li(cell)\n",
+ "newcell=imdat[num]"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ }
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "LumZS1pmIurT",
+ "colab_type": "code",
+ "outputId": "70766759-1ce9-4b87-fa84-796405de361b",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 408
+ }
+ },
+ "source": [
+ "import matplotlib\n",
+ "import matplotlib.pyplot as plt\n",
+ "import numpy as np\n",
+ "\n",
+ "from skimage import data, img_as_float\n",
+ "from skimage import exposure\n",
+ "\n",
+ "#todo\n",
+ "\n",
+ "# Equalization\n",
+ "img_eq = exposure.equalize_hist(newcell)\n",
+ "\n",
+ "# Adaptive Equalization\n",
+ "img_adapteq = exposure.equalize_adapthist(newcell, clip_limit=0.03)\n",
+ "\n",
+ "fig, ax = plt.subplots(ncols=2, figsize=(10, 5))\n",
+ "\n",
+ "ax[0].imshow(img_eq, cmap='gray', vmin=0, vmax=65536)# cmap=plt.cm.gray) #example image\n",
+ "ax[0].axis('off')\n",
+ "\n",
+ "ax[1].imshow(img_adapteq, cmap=plt.cm.gray) #example image\n",
+ "ax[1].axis('off')\n",
+ "\n",
+ "plt.tight_layout()\n"
+ ],
+ "execution_count": 4,
+ "outputs": [
+ {
+ "output_type": "error",
+ "ename": "ValueError",
+ "evalue": "ignored",
+ "traceback": [
+ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
+ "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)",
+ "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 9\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 10\u001b[0m \u001b[0;31m# Equalization\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 11\u001b[0;31m \u001b[0mimg_eq\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mexposure\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mequalize_hist\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnewcell\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 12\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 13\u001b[0m \u001b[0;31m# Adaptive Equalization\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+ "\u001b[0;32m/usr/local/lib/python3.6/dist-packages/skimage/exposure/exposure.py\u001b[0m in \u001b[0;36mequalize_hist\u001b[0;34m(image, nbins, mask)\u001b[0m\n\u001b[1;32m 219\u001b[0m \u001b[0mcdf\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbin_centers\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcumulative_distribution\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mimage\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mmask\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnbins\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 220\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 221\u001b[0;31m \u001b[0mcdf\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbin_centers\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcumulative_distribution\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mimage\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnbins\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 222\u001b[0m \u001b[0mout\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0minterp\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mimage\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mflat\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbin_centers\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcdf\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 223\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mout\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreshape\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mimage\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+ "\u001b[0;32m/usr/local/lib/python3.6/dist-packages/skimage/exposure/exposure.py\u001b[0m in \u001b[0;36mcumulative_distribution\u001b[0;34m(image, nbins)\u001b[0m\n\u001b[1;32m 179\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 180\u001b[0m \"\"\"\n\u001b[0;32m--> 181\u001b[0;31m \u001b[0mhist\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbin_centers\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mhistogram\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mimage\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnbins\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 182\u001b[0m \u001b[0mimg_cdf\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mhist\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcumsum\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 183\u001b[0m \u001b[0mimg_cdf\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mimg_cdf\u001b[0m \u001b[0;34m/\u001b[0m \u001b[0mfloat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mimg_cdf\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+ "\u001b[0;32m/usr/local/lib/python3.6/dist-packages/skimage/exposure/exposure.py\u001b[0m in \u001b[0;36mhistogram\u001b[0;34m(image, nbins, source_range, normalize)\u001b[0m\n\u001b[1;32m 137\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 138\u001b[0m \u001b[0mValueError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Wrong value for the `source_range` argument'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 139\u001b[0;31m \u001b[0mhist\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbin_edges\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhistogram\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mimage\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbins\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mnbins\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mhist_range\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 140\u001b[0m \u001b[0mbin_centers\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mbin_edges\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mbin_edges\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m/\u001b[0m \u001b[0;36m2.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 141\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
+ "\u001b[0;32m<__array_function__ internals>\u001b[0m in \u001b[0;36mhistogram\u001b[0;34m(*args, **kwargs)\u001b[0m\n",
+ "\u001b[0;32m/usr/local/lib/python3.6/dist-packages/dask/array/core.py\u001b[0m in \u001b[0;36m__array_function__\u001b[0;34m(self, func, types, args, kwargs)\u001b[0m\n\u001b[1;32m 1015\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mda_func\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1016\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mNotImplemented\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1017\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mda_func\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1018\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1019\u001b[0m \u001b[0;34m@\u001b[0m\u001b[0mproperty\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+ "\u001b[0;32m/usr/local/lib/python3.6/dist-packages/dask/array/routines.py\u001b[0m in \u001b[0;36mhistogram\u001b[0;34m(a, bins, range, normed, weights, density)\u001b[0m\n\u001b[1;32m 600\u001b[0m \"\"\"\n\u001b[1;32m 601\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0miterable\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mbins\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mrange\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0mbins\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 602\u001b[0;31m raise ValueError('dask.array.histogram requires either specifying '\n\u001b[0m\u001b[1;32m 603\u001b[0m \u001b[0;34m'bins as an iterable or specifying both a range and '\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 604\u001b[0m 'the number of bins')\n",
+ "\u001b[0;31mValueError\u001b[0m: dask.array.histogram requires either specifying bins as an iterable or specifying both a range and the number of bins"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "WDIGe52WhMUR",
+ "colab_type": "code",
+ "outputId": "5143387f-fe31-413d-a82f-6bd60fe3b45b",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 296
+ }
+ },
+ "source": [
+ "import numpy as np\n",
+ "import dask.array as da\n",
+ "import dask\n",
+ "from dask_ml.decomposition import PCA\n",
+ "n_samples, h, w = imdat.shape\n",
+ "d2_dX = imdat.reshape((n_samples,h*w))\n",
+ "comp=100\n",
+ "n_components=comp\n",
+ "dX =d2_dX\n",
+ "pca = PCA(n_components=comp)\n",
+ "pca.fit(dX)\n",
+ "PCA(copy=True, iterated_power='auto', n_components=comp , random_state=None,\n",
+ " svd_solver='auto', tol=0.0, whiten=False)\n",
+ "#print(pca.explained_variance_ratio_) \n",
+ "#print(pca.singular_values_) \n",
+ "\n",
+ "plt.plot(np.cumsum(pca.explained_variance_ratio_))\n",
+ "plt.xlabel('n components')\n",
+ "plt.ylabel('cumulative variance')"
+ ],
+ "execution_count": 5,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "Text(0, 0.5, 'cumulative variance')"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 5
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ "