Skip to content

Instantly share code, notes, and snippets.

View dkn22's full-sized avatar

Dat Nguyen dkn22

View GitHub Profile
@dkn22
dkn22 / tsp-dynamic-programming.py
Created October 7, 2018 21:52
Dynamic Programming algorithm for the Travelling Salesman problem
import itertools
from sklearn.metrics.pairwise import euclidean_distances
def tsp(points):
distances = euclidean_distances(points)
A = {(frozenset([0, j+1]), j+1): dist for j, dist in enumerate(distances[0][1:])}
A[frozenset([0]), 0] = 0
n = len(points)
@dkn22
dkn22 / bellman_ford.py
Created September 17, 2018 19:20
Bellman-Ford algorithm for shortest paths
import numpy as np
import numba
@numba.jit
def bellman_ford(graph, start_vertex):
n = len(graph.nodes)
A = np.zeros((n+1, n))
A[0, :] = np.inf
A[0, start_vertex] = 0
@dkn22
dkn22 / floyd_marshall.py
Created September 17, 2018 18:20
Floyd-Marshall algorithm for all-pairs shortest paths
import numpy as np
import numba
@numba.jit
def floyd_marshall(graph):
n = len(graph.nodes)
A = np.full((n, n, n), fill_value=np.inf)
# base cases
for edge in graph.edges:
@dkn22
dkn22 / knapsack.py
Last active September 8, 2018 15:58
0-1 knapsack problem via dynamic programming
import numpy as np
import functools
def knapsack(capacity, items):
n = len(items)
A = np.zeros((n, capacity))
for i in range(n):
value, weight = items[i]
@dkn22
dkn22 / max_spacing_k_clustering.py
Created September 1, 2018 17:17
Max-Spacing K-Clustering Algorithm
class UnionFind:
def __init__(self, ids):
self._id = {i: i for i in ids} # pointer to the leader
self.sizes = {i: 1 for i in ids}
self.n_components = len(set(self._id))
def _root(self, i):
j = i
while (j != self._id[j]):
self._id[j] = self._id[self._id[j]]
@dkn22
dkn22 / strongly_connected_components.py
Created August 8, 2018 22:14
Kosaraju's Algorithm to find strongly connected components in a directed graph
class SCC():
def __init__(self, graph):
self.graph = graph
self.time = 0
self.visited = []
self.finish_times = {}
def transpose_graph(self):
g_rev = {}
@dkn22
dkn22 / random_contraction_algorithm.py
Last active August 2, 2018 05:52
Karger's random contraction algorithm for finding a min cut of a graph
import numpy as np
from copy import deepcopy
def random_contraction(graph, n_repeat=None):
"""
graph: undirected graph as a dict of lists
(adjacency list representation)
n_repeat: Number of repeated independent trials
"""
if n_repeat is None:
from embedder.regression import Embedder
from embedder.assessment import visualize
import matplotlib.pyplot as plt
embedder = Embedder(embedding_dict)
embedder.fit(X_encoded, y)
embeddings = embedder.get_embeddings()
print(type(embeddings)) # a dictionary
@dkn22
dkn22 / embedder_transform.py
Last active March 15, 2018 23:07
Using embedder to transform categorical variables
from embedder.regression import Embedder
from sklearn.pipeline import Pipeline
from xgboost import XGBRegressor
embedder = Embedder(embedding_dict)
embedder.fit(X_encoded, y)
X_embedded = embedder.transform(X)
# X_embedded = embedder.fit_transform(X, y)
@dkn22
dkn22 / embedder_demo.py
Last active March 26, 2018 14:18
embed rossman data
import pandas as pd
from embedder.regression import Embedder
from embedder.preprocessing import (categorize,
pick_emb_dim, encode_categorical)
rossman = pd.read_csv('rossman.csv')
y = rossman['Sales']
X = rossman.drop('Sales', axis=1)
cat_vars = categorize(rossman)