Mercurial > hg > dml-open-cliopatria
view cpack/dml/lib/kern_analysis.pl @ 0:718306e29690 tip
commiting public release
author | Daniel Wolff |
---|---|
date | Tue, 09 Feb 2016 21:05:06 +0100 |
parents | |
children |
line wrap: on
line source
/* Part of DML (Digital Music Laboratory) Copyright 2014-2015 Samer Abdallah, University of London This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ :- module(kern_analysis, []). :- use_module(library(kerndata)). :- use_module(library(grammars)). :- use_module(library(compression)). :- use_module(library(swipe)). grammars:dataset_sequences(DS,Seqs) :- kerndata:dataset_sequences(DS,Seqs). write_dataset_sequences(DS) :- dataset_sequences(DS,SS), with_stream_encoding(current_output,octet, maplist(write_seq(notenums),SS)). write_dataset(Prep,DS) :- dataset_sequences(DS,SS), with_stream_encoding(current_output,octet, maplist(write_seq(Prep),SS)). write_item(Prep,Item) :- item_sequence(Item,Sequence), write_seq(Prep,Sequence). write_seq(notenums,NS) :- write_bytes(NS), write_bytes([255]). write_seq(intervals,NS) :- nth1(1,NS,N1), nnums_ivals(NS,IS), append(IS2,[end],IS), maplist(plus(127),IS2,CS), write_bytes([N1|CS]), write_bytes([255]). ds_complexity(Method,Prep,DS,K) :- complexity(Method, write_dataset(Prep,DS), K). ds_conditional_complexity(Method,Prep,Ref,DS,K) :- conditional_complexity(Method, write_dataset(Prep,Ref), write_dataset(Prep,DS), K). % ds_mutual_information(Method,Prep,DS1,DS2,I) :- % mutual_information(Method, % write_dataset(Prep,DS1), % write_dataset(Prep,DS2), % I). arg_min(K-Meth,Goal,KMin-Best) :- aggregate_all(min(K,Meth),(Goal,Meth\=naive(_,_)),min(KMin,Best)). :- use_module(library(lambda)). :- use_module(library(mlserver)). :- use_module(library(uri)). exp(conditioning_scat(DS,Prep,Ref)) :- dataset_items(DS,Items), findall([KMin,CKMin], ( member(I,Items), min_complexity(_,write_item(Prep,I),KMin), min_conditional_complexity(_,write_dataset(Prep,Ref), write_item(Prep,I),CKMin) ), XX), ??scat(transpose(arr(XX))), ??xlabel(q(complexity)), ??ylabel(q('conditional complexity')). exp(relative_erasure(DS,Prep)) :- dataset_items(DS,Items), findall(CKRel, ( select(I,Items,Rest), min_complexity(_,write_item(Prep,I),KMin), min_conditional_complexity(_,maplist(write_item(Prep),Rest), write_item(Prep,I),CKMin), CKRel is 1- CKMin/KMin ), XX), ??barh(XX), ??xlabel(q('1 - relative erasure complexity')), item_yticks(Items). exp(odd_one_out(Prep,DS,DS2,N)) :- dataset_items(DS,Items), dataset_items(DS2,Items2), nth1(N,Items2,OddBall), AllItems=[OddBall|Items], findall(CKRel, ( select(I,AllItems,Rest), min_complexity(_,write_item(Prep,I),KMin), min_conditional_complexity(_,maplist(write_item(Prep),Rest), write_item(Prep,I),CKMin), CKRel is 1 - CKMin/KMin ), XX), ??barh(XX), ??xlabel(q('1 - relative erasure complexity')), item_yticks(AllItems). exp(erasure(DS,Prep)) :- dataset_items(DS,Items), findall([KMin,CKMin], ( select(I,Items,Rest), min_complexity(_,write_item(Prep,I),KMin), min_conditional_complexity(_,maplist(write_item(Prep),Rest), write_item(Prep,I),CKMin) ), XX), ??barh(transpose(arr(XX))), ??legend(cell([q(isolated),q(erasure)])), ??xlabel(q(bits)), item_yticks(Items). exp(compressibility(DS,Prep,Ref)) :- dataset_items(DS,Items), findall([CKMin,KMin], ( member(I,Items), % complexity(id,write_item(Prep,I),L), min_complexity(_,write_item(Prep,I),KMin), min_conditional_complexity(_,write_dataset(Prep,Ref), write_item(Prep,I),CKMin) % arg_min(K-C, conditional_complexity(naive(C),write_dataset(Prep,Ref), % write_item(Prep,I),K), NCK-_) ), XX), ??barh(transpose(arr(XX))), item_yticks(Items), ??xlabel(q(bits)), ??legend(cell([q('delta compressed'),q(compressed)])). exp(info_density(DS,Prep,Ref)) :- dataset_items(DS,Items), findall([H,HRef], ( member(I,Items), item_sequence(I,Pitches), length(Pitches,L), min_complexity(_,write_item(Prep,I),KMin), min_conditional_complexity(_,write_dataset(Prep,Ref), write_item(Prep,I),CKMin), H is KMin/L, HRef is CKMin/L ), XX), ??barh(transpose(arr(XX))), ??legend(cell([q(isolated),q(conditional)])), ??xlabel(q('bits per note')), item_yticks(Items). exp(ds_similarity_matrix(Prep,Meth,Datasets)) :- ncd_matrix(ncd(Meth), write_dataset(Prep), Datasets, Matrix), ncd_image(Matrix), yticks(Datasets). exp(similarity_matrix(Prep,Meth,DS)) :- dataset_items(DS,Items), ncd_matrix(ncd(Meth), write_item(Prep), Items, Matrix), ncd_image(Matrix), item_yticks(Items). exp(conditional_similarity_matrix(Prep,Method,DS,Ref)) :- dataset_items(DS,Items), ncd_matrix(conditional_ncd(Method,write_dataset(Prep,Ref)), write_item(Prep), Items, Matrix), ncd_image(Matrix), item_yticks(Items). exp(ds_conditional_similarity_matrix(Prep,Method,Datasets,Ref)) :- ncd_matrix(conditional_ncd(Method,write_dataset(Prep,Ref)), write_dataset(Prep), Datasets, Matrix), ncd_image(Matrix), yticks(Datasets). ncd_image(Matrix) :- ??imagesc(1-arr(Matrix)), ??colorbar. ncd_matrix(Sim,Writer,Items,Matrix) :- length(Items,N), numlist(1,N,IX), maplist(ncd_matrix_column(Sim,Writer,Items,IX),IX,Matrix). ncd_matrix_column(Sim,Writer,Items,JX,I,Column) :- maplist(ncd_matrix_entry(Sim,Writer,Items,I),JX,Column). ncd_matrix_entry(Sim,Writer,Items,I,J,D) :- ( I=J -> D=nan ; nth1(I,Items,XI), nth1(J,Items,XJ), call(Sim, call(Writer,XI), call(Writer,XJ), D) ). item_yticks(Items) :- length(Items,NumItems), maplist(item_label,Items,Labels), ??yticks(1:NumItems,cell(Labels)). item_label(Item,q(Name)) :- item_uri(Item,URI), uri_components(URI,Components), uri_data(path,Components,Path), directory_file_path(_,File,Path), file_name_extension(Name,_,File). printfig(W,H,Name) :- format(atom(Path),'/Users/samer/pubs/asymmus/workshop/figs/~w.eps',[Name]), format(atom(Cmd),'epstopdf ~w',[Path]), ??fsetup(W,H,q(centimeters)), ??print(q('-depsc2'),q(Path)), shell(Cmd). plot_method_rankings :- setof( r(MeanRank,Method,Ranks), ( compression:method_rankings(Method,Ranks), mean_list(Ranks,MeanRank)), Results), ??newplot, ??hold(q(on)), forall( nth1(I,Results,r(_,_,Ranks)), ??plot(Ranks,I+0.7*(rand(size(Ranks))-0.5),q('.'))), ??hold(q(off)), maplist(result_method,Results,Methods), yticks(Methods). result_method(r(_,Method,_),Method). yticks(Terms) :- length(Terms,N), maplist(term_label,Terms,Labels), ??yticks(1:N,cell(Labels)). term_label(Term,q(Label)) :- format(atom(Label),'~w',[Term]). mean_list(L,Mean) :- length(L,N), sumlist(L,Sum), Mean is Sum/N. % pairwise(DS,Matrix) :- % dataset_items(DS,Items), % maplist(\I1^maplist(\I2^conditional_complexity( % rnd_state(T) :- get_rnd_state(S), rnd_state_term(S,T). % with_sample(T,RV,Pred) :- % rnd_state_term(S1,T), % sample(RV,X,S1,S2), % set_rnd_state(S2), % call(Pred,X).