Algorithms for ML

Here we provide some codes for machine learning, which may be useful for later research. The codes depend on autograd "https://github.com/HIPS/autograd".

Logistic regression

import autograd.numpy as np   # Thinly-wrapped version of Numpy
from autograd import grad
import matplotlib.pyplot as plt

def sigmoid(x):
    return 0.5*(np.tanh(x/2.0) + 1)

def logistic_predictions(weights, inputs):
    return sigmoid(np.dot(inputs, weights))

def training_loss(weights):
    preds = logistic_predictions(weights, inputs)
    log_label_probabilities = np.log(preds)*targets + np.log((1-preds))*(1-targets)
    return -np.sum(log_label_probabilities)

inputs = np.array([[0.52, 1.12,  0.77],
                   [0.88, -1.08, 0.15],
                   [0.52, 0.06, -1.30],
                   [0.74, -2.49, 1.39]])
    
targets = np.array([True, True, False, False])

training_gradient_fun = grad(training_loss)

weights = np.array([0.0, 0.0, 0.0])
print("Initial loss: ", training_loss(weights))
errors = []
for i in range(1000):
    weights -= training_gradient_fun(weights)*0.01
    # 對于這個(gè)Logistic regression的簡單程序挽封,我們可以手動計(jì)算導(dǎo)數(shù)如下:
    #weights -= 0.01*(np.dot(logistic_predictions(weights, inputs) - targets, inputs))
    errors.append(training_loss(weights))
    
print("Trained loss: ", training_loss(weights))
plt.plot(errors)

Black box variational inference

The approximate probability measure is chosen to be Gaussian, and the true probability measure is a mixture Gaussian with two components.

import matplotlib.pyplot as plt

import autograd.numpy as np
import autograd.numpy.random as npr
import autograd.scipy.stats.multivariate_normal as mvn
import autograd.scipy.stats.norm as norm

from autograd import grad
from autograd.misc.optimizers import adam


def black_box_variational_inference(logprob, D, num_samples):
    def unpack_params(params):
        # Variational approximate pdf is a diagonal Gaussian
        mean, log_std = params[:D], params[D:]
        return mean, log_std
    
    def gaussian_entropy(log_std):
        return 0.5*D*(1.0 + np.log(2*np.pi)) + np.sum(log_std)
    
    rs = npr.RandomState(0)
    def variational_objective(params, t):
        """
        Provides a stochastic estimate of the variational lower bound
        """
        mean, log_std = unpack_params(params)
        samples = rs.randn(num_samples, D)*np.exp(log_std) + mean
        lower_bound = gaussian_entropy(log_std) + np.mean(logprob(samples))
        return -lower_bound
    
    gradient = grad(variational_objective)
    
    return variational_objective, gradient, unpack_params


if __name__ == "__main__":
    
    # Specify an inference problem by its unnormalized log-density
    D = 2
    def log_density(x):
        mu1 = np.array([-0.7, -0.7])
        mu2 = np.array([0.7, 0.7])
        sig1 = np.array([[1.0, 0.0], [0.0, 0.1]])
        sig2 = np.array([[0.1, 0.0], [0.0, 1.0]])
        mu_density = np.log(mvn.pdf(x, mu1, sig1) + mvn.pdf(x, mu2, sig2))
        return mu_density
    
    # Build variational objective
    objective, gradient, unpack_params = \
            black_box_variational_inference(log_density, D, num_samples=200)
    
    # Set up plotting code
    def plot_isocontours(ax, func, xlimits=[-2, 2], ylimits=[-2, 2], numticks=101):
        x = np.linspace(*xlimits, num=numticks)
        y = np.linspace(*ylimits, num=numticks)
        X, Y = np.meshgrid(x, y)
        zs = func(np.concatenate([np.atleast_2d(X.ravel()), np.atleast_2d(Y.ravel())]).T)
        Z = zs.reshape(X.shape)
        plt.contour(X, Y, Z)
        ax.set_yticks([])
        ax.set_xticks([])
        
    # Set up figure
    fig = plt.figure(figsize=(8, 8), facecolor="white")
    ax = fig.add_subplot(111, frameon=False)
    plt.ion()
    plt.show(block=False)        
    
    def callback(params, t, g):
        print("Iteration {} lower bound {}".format(t, -objective(params, t)))
        
        plt.cla()
        target_distribution = lambda x: np.exp(log_density(x))
        plot_isocontours(ax, target_distribution)
        
        mean, log_std = unpack_params(params)
        variational_contour = lambda x: mvn.pdf(x, mean, np.diag(np.exp(2*log_std)))
        plot_isocontours(ax, variational_contour)
        plt.draw()
        plt.pause(1.0/10.0)
        
    print("Optimizing variational parameters...")
    init_mean = -1*np.ones(D)
    init_log_std = -5*np.ones(D)
    init_var_params = np.concatenate([init_mean, init_log_std])
    variational_params = adam(gradient, init_var_params, step_size=0.1, 
                              num_iters=200, callback=callback)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末已球,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌智亮,老刑警劉巖忆某,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異阔蛉,居然都是意外死亡弃舒,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進(jìn)店門状原,熙熙樓的掌柜王于貴愁眉苦臉地迎上來聋呢,“玉大人,你說我怎么就攤上這事颠区∠髅蹋” “怎么了?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵毕莱,是天一觀的道長器贩。 經(jīng)常有香客問我,道長朋截,這世上最難降的妖魔是什么蛹稍? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮部服,結(jié)果婚禮上唆姐,老公的妹妹穿的比我還像新娘。我一直安慰自己饲宿,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布胆描。 她就那樣靜靜地躺著瘫想,像睡著了一般。 火紅的嫁衣襯著肌膚如雪昌讲。 梳的紋絲不亂的頭發(fā)上国夜,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天,我揣著相機(jī)與錄音短绸,去河邊找鬼车吹。 笑死,一個(gè)胖子當(dāng)著我的面吹牛醋闭,可吹牛的內(nèi)容都是我干的窄驹。 我是一名探鬼主播,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼证逻,長吁一口氣:“原來是場噩夢啊……” “哼乐埠!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤丈咐,失蹤者是張志新(化名)和其女友劉穎瑞眼,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體棵逊,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡伤疙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了辆影。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片徒像。...
    茶點(diǎn)故事閱讀 39,977評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖秸歧,靈堂內(nèi)的尸體忽然破棺而出厨姚,到底是詐尸還是另有隱情,我是刑警寧澤键菱,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布谬墙,位于F島的核電站,受9級特大地震影響经备,放射性物質(zhì)發(fā)生泄漏拭抬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一侵蒙、第九天 我趴在偏房一處隱蔽的房頂上張望造虎。 院中可真熱鬧,春花似錦纷闺、人聲如沸算凿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽氓轰。三九已至,卻和暖如春浸卦,著一層夾襖步出監(jiān)牢的瞬間署鸡,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工限嫌, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留靴庆,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓怒医,卻偏偏與公主長得像炉抒,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子稚叹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評論 2 355