In [1]:
%matplotlib notebook
import numpy as np
import os, string
from matplotlib import pyplot as plt
import scipy as sp
import sklearn as sk
import tensorflow as tf
from sklearn.datasets import load_iris
iris = load_iris()
data=iris['data']
target = iris['target']
print(data.shape)
In [2]:
#pca
mean = data.mean(axis=0)
#print(mean)
data1 = np.mat(data - mean)
#print(data1[:3,:])
cor = data1.T.dot(data1)
#print(cor)
s,v,d = np.linalg.svd(cor)
print(s,v)
In [3]:
tv = s[:2,:]
#print(tv)
pca = data1.dot(tv.T)
#print(pca[:2,:])
plt.scatter(pca[:50,0],pca[:50,1],c='r')
plt.scatter(pca[50:100,0],pca[50:100,1],c='g')
plt.scatter(pca[100:150,0],pca[100:150,1],c='b')
Out[3]:
In [4]:
#import mpl_toolkits.mplot3d as plt3
fig = plt.figure()
ax = fig.add_subplot(111)
#ax = fig.add_subplot(111, projection='3d')
#ax3D.scatter(x, y, z, s=30, c=col, marker='o', cmap=cm)
#ax.scatter(np.array(data[:50,3]),np.array(data[:50,1]),np.array(data[:50,1]), s=20, c='r')
#ax.scatter(np.array(data[50:100,3]),np.array(data[50:100,0]),np.array(data[50:100,1]), s=20, c='g')
#ax.scatter(np.array(data[100:150,3]),np.array(data[100:150,0]),np.array(data[100:150,1]), s=20, c='b')
ax.scatter(np.array(data[:50,0]),np.array(data[:50,1]), s=20, c='r')
ax.scatter(np.array(data[50:100,0]),np.array(data[50:100,1]), s=20, c='g')
ax.scatter(np.array(data[100:150,0]),np.array(data[100:150,1]), s=20, c='b')
Out[4]:
In [5]:
from sklearn.cluster import KMeans
clf=KMeans(n_clusters=3)
model=clf.fit(data)
predicted=model.predict(data)
print(predicted)
model=clf.fit(pca)
predicted=model.predict(pca)
print(predicted)
In [6]:
from sklearn.manifold import TSNE
model = TSNE(n_components=2, random_state=0,n_iter=10000, learning_rate=100)
model.fit(data)
restsne=model.fit_transform(data)
print(restsne.shape)
In [7]:
fig2 = plt.figure()
ax2 = fig2.add_subplot(111)
draw = np.array(restsne)
#draw[:,0]=np.sqrt(draw[:,1])
#print(np.array(restsne[:,1]))
ax2.scatter(draw[:50,0],draw[:50,1],c='r')
ax2.scatter(draw[50:100,0],draw[50:100,1],c='g')
ax2.scatter(draw[100:150,0],draw[100:150,1],c='b')
Out[7]:
In [8]:
#calc pij
max0 = np.max(data,0)
min0 = np.min(data,0)
ndata = (data-min0)/(max0-min0)
print(ndata[:3,:])
sigma=1.0
pij = np.zeros((150,150))
ind =0
for i in ndata:
#print(i)
pij[:,ind]=np.exp(-np.sum(np.square(i - ndata),1)/sigma)
ind +=1
for i in range(0,150):
pij[i,i]=0
print(pij[:5,:5])
for i in pij:
i /= np.sum(i)
print(pij[:5,:5])
#sym pij
spij = (pij + np.transpose(pij))/2.
spij = np.maximum(0.000001,spij)
print(spij[:5,:5])
In [29]:
with tf.device('/cpu:0'):
X = tf.placeholder('float',(150,150))
initial = tf.random_normal([150,2]) * 0.0001
Y = tf.Variable(initial)
A = tf.reduce_sum(Y*Y, axis=1)
A = tf.reshape(r, [-1, 1])
#pair wise distance
pairD = A - 2*tf.matmul(Y, tf.transpose(Y)) + tf.transpose(A) + 1.
qij = 1./pairD
sumq = tf.reduce_sum(qij,axis=1)
qij /= sumq
test = tf.log(X / qij)
loss = tf.reduce_sum( X*tf.log(X / qij) )
global_step = tf.Variable(0, name = 'global_step',trainable=False)
starter_learning_rate = 0.1
learning_rate = tf.train.exponential_decay(starter_learning_rate, global_step,20, 0.95, staircase=True)
train_op = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(loss=loss,global_step = global_step)
config = tf.ConfigProto(allow_soft_placement = True)
sess = tf.Session(config = config)
sess.run(tf.global_variables_initializer())
#print(sess.run(test,feed_dict={X: spij}))
In [30]:
for i in range(3000):
_,lr,y = sess.run([train_op,learning_rate,Y], feed_dict={X: spij})
if i % 300 == 0:
print(i,lr,y[:1,:])
res = sess.run(Y)
In [31]:
print(res)
In [32]:
fig3 = plt.figure()
ax3 = fig3.add_subplot(111)
ax3.scatter(res[:50,0],res[:50,1],c='r',s=20)
ax3.scatter(res[50:100,0],res[50:100,1],c='g',s=20)
ax3.scatter(res[100:150,0],res[100:150,1],c='b',s=20)
Out[32]:
In [ ]: