def main(speaker_name,ivpath): ivpath = "{0}{1}/".format(ivpath,speaker_name) anstxtpath = "/home/nozaki/speaker_clustering/news_kotae/{0}/re_anchor{1}.txt".format(speaker_name,test_anchor_num) ivmodule = iv_module(roop_num,iv_th,tyouhuku_th,anchor_th) filelist,num,filename = ivmodule.get_filelist(ivpath)#filelist:ループされていく毎に減っていくwavデータのリスト ori_filelist,ori_num,_ = ivmodule.get_filelist(ivpath) #ori_filelist:クラスタ分けする全ての音声ファイル anslist = ivmodule.read_ansfile(anstxtpath) cluster = np.zeros(ori_num) all_anchor = [] anchor_num = 0 print("filename:{}".format(filename)) for i in range(roop_num): num = ivmodule.cnt_filenum(filelist) tyouhuku = ivmodule.cnt_tyouhuku_num(ivpath,filelist)#リストにある音声ファイルのcos類似度による重複回数のリストを返す maxfile = filelist[np.argmax(tyouhuku)]#重複回数が最大となる音声ファイルを探し、 lis = ivmodule.get_thlist(ivpath,maxfile,filelist)#もっとも重複した音声ファイルが多い音声ファイルの重複したwavファイルのリストを返す aveiv = [] for item in lis: addcos = 0 for item2 in filelist: addcos =+ ivmodule.calc_cos(ivpath,item, item2) if(addcos/len(lis)>iv_th): aveiv.append(item2) lis = aveiv + lis if((ivmodule.cnt_filenum(lis)/ori_num) < anchor_th): if(anchor_num == 0): anchor_num = i break for item in lis: delnum = ivmodule.search_filenum(ori_filelist,item,ori_num) cluster[delnum] = i+1#クラスタ分けされた音声ファイルにラベルを付ける filelist.remove(item)#クラスタ分けされた音声ファイルをリストから削除する all_anchor.append(item) print("anchor_num is:{}\n".format(anchor_num)) #ivmodule.all_clusnum_to_filename(cluster,ori_num,ori_filelist,anchor_num)#クラスタ分けの数字からファイル名をクラスタ毎に取り出す queslist = ivmodule.clusnum_to_filename(cluster,ori_num,ori_filelist,anchor_num,ques_anchor_cluster_num)#クラスタ分けの数字からファイル名をクラスタ毎に取り出す """時間的な分散の云々かんぬん print(queslist) variance = ivmodule.time_del_clus(ivpath,queslist,filename) print(variance) """ acc,recall,precision,f_measure = ivmodule.test(ori_filelist,anslist,queslist) print("{},{},{},{}".format(acc,recall,precision,f_measure)) print("acc:{0:.3f}\nrecall:{1:.3f}\nprecision:{2:.3f}\nf_measure:{3:.3f}".format(acc,recall,precision,f_measure))
def main(speaker_name, ivpath): ivpath = "{0}{1}/".format(ivpath, speaker_name) ivmodule = iv_module(roop_num, iv_th, tyouhuku_th, anchor_th) filename = speaker_name filelist, num, _ = ivmodule.get_filelist( ivpath) #filelist:ループされていく毎に減っていくwavデータのリスト ori_filelist, ori_num, _ = ivmodule.get_filelist( ivpath) #ori_filelist:クラスタ分けする全ての音声ファイル cluster = np.zeros(ori_num) all_anchor = [] anchor_num = 0 print("filename:{}".format(filename)) for i in range(roop_num): num = ivmodule.cnt_filenum(filelist) tyouhuku = ivmodule.cnt_tyouhuku_num( ivpath, filelist) #リストにある音声ファイルのcos類似度による重複回数のリストを返す maxfile = filelist[np.argmax(tyouhuku)] #重複回数が最大となる音声ファイルを探し、 th_list = ivmodule.get_thlist( ivpath, maxfile, filelist) #もっとも重複した音声ファイルが多い音声ファイルの重複したwavファイルのリストを返す tyouhukulist = ivmodule.get_tyouhukulist(ivpath, filelist, th_list) #重重したwavファイルのリストを返す lis = np.array(ivmodule.make_tyouhukulist( filelist, tyouhukulist, num)) #重複回数が閾値以上のファイルのリストを返してnumpy.arrayに変換 if ((ivmodule.cnt_filenum(lis) / ori_num) < anchor_th): if (anchor_num == 0): anchor_num = i break for item in lis: delnum = ivmodule.search_filenum(ori_filelist, item, ori_num) cluster[delnum] = i + 1 #クラスタ分けされた音声ファイルにラベルを付ける filelist.remove(item) #クラスタ分けされた音声ファイルをリストから削除する all_anchor.append(item) cluster = ivmodule.speaker_0reset(cluster, ori_num, anchor_num) cluster, anchor_num = ivmodule.speaker_splice(cluster, ori_filelist, ori_num, anchor_num) cluster = ivmodule.speaker_heikatuka(cluster, ori_filelist, ori_num, anchor_num) print("anchor_num is:{}\n".format(anchor_num)) ivmodule.all_clusnum_to_filename(cluster, ori_num, ori_filelist, anchor_num) #クラスタ分けの数字からファイル名をクラスタ毎に取り出す
def main(speaker_name, ivpath): ivpath = "{0}{1}/".format(ivpath, speaker_name) anstxtpath = "/home/nozaki/speaker_clustering/news_kotae/{0}/re_anchor{1}.txt".format( speaker_name, test_anchor_num) ivmodule = iv_module(roop_num, iv_th, tyouhuku_th, anchor_th) filelist, num, filename = ivmodule.get_filelist( ivpath) #filelist:ループされていく毎に減っていくwavデータのリスト ori_filelist, ori_num, _ = ivmodule.get_filelist( ivpath) #ori_filelist:クラスタ分けする全ての音声ファイル anslist = ivmodule.read_ansfile(anstxtpath) cluster = np.zeros(ori_num) all_anchor = [] anchor_num = 0 print("filename:{}".format(filename)) for i in range(roop_num): num = ivmodule.cnt_filenum(filelist) tyouhuku = ivmodule.cnt_tyouhuku_num( ivpath, filelist) #リストにある音声ファイルのcos類似度による重複回数のリストを返す maxfile = filelist[np.argmax(tyouhuku)] #重複回数が最大となる音声ファイルを探し、 th_list = ivmodule.get_thlist( ivpath, maxfile, filelist) #もっとも重複した音声ファイルが多い音声ファイルの重複したwavファイルのリストを返す tyouhukulist = ivmodule.get_tyouhukulist(ivpath, filelist, th_list) #重重したwavファイルのリストを返す lis = np.array(ivmodule.make_tyouhukulist( filelist, tyouhukulist, num)) #重複回数が閾値以上のファイルのリストを返してnumpy.arrayに変換 if ((ivmodule.cnt_filenum(lis) / ori_num) < anchor_th): if (anchor_num == 0): anchor_num = i break for item in lis: delnum = ivmodule.search_filenum(ori_filelist, item, ori_num) cluster[delnum] = i + 1 #クラスタ分けされた音声ファイルにラベルを付ける filelist.remove(item) #クラスタ分けされた音声ファイルをリストから削除する all_anchor.append(item) print("anchor_num is:{}\n".format(anchor_num)) #ivmodule.all_clusnum_to_filename(cluster,ori_num,ori_filelist,anchor_num)#クラスタ分けの数字からファイル名をクラスタ毎に取り出す queslist = ivmodule.clusnum_to_filename( cluster, ori_num, ori_filelist, anchor_num, test_anchor_num) #クラスタ分けの数字からファイル名をクラスタ毎に取り出す acc, recall, precision, f_measure = ivmodule.test(ori_filelist, anslist, queslist) print("acc:{0:.3f}\nrecall:{1:.3f}\nprecision:{2:.3f}\nf_measure:{3:.3f}". format(acc, recall, precision, f_measure)) #for plot program clus0or1 = [] for item in ori_filelist: flag = 0 for item2 in anslist: if (item == item2): clus0or1.append("1") flag = 1 break if (flag == 0): clus0or1.append("0") clus0or1 = np.array(clus0or1) iv = [] for item in ori_filelist: iv.append(ivmodule.get_ivdata(ivpath, item)) chart1, chart2 = [], [] for i, item in enumerate(ori_filelist): #図の重ねがけで使う if (clus0or1[i] == "0"): chart1.append(i) else: chart2.append(i) df_wine_all = pd.DataFrame(iv) X = df_wine_all.iloc[0:].values # 3:データの整形------------------------------------------------------- sc = preprocessing.StandardScaler() sc.fit(X) X = sc.transform(X) # 解説4:主成分分析を実施------------------------------- pca = decomposition.PCA(n_components=2) X_transformed = pca.fit_transform(X) # 6: 結果をプロットする----------------------------- #matplotlib inline X = X_transformed[:, 0] Y = X_transformed[:, 1] X_1, X_2, Y_1, Y_2 = [], [], [], [] for item in chart1: X_1.append(X[item]) Y_1.append(Y[item]) for item in chart2: X_2.append(X[item]) Y_2.append(Y[item]) plt.figure(figsize=(5, 5)) plt.subplot(1, 1, 1) plt.scatter(X_1, Y_1, marker="o", c="black") plt.scatter(X_2, Y_2, marker="x", c="black") #plt.scatter(X,Y,c=clus0or1) plt.xlabel('PC1') plt.ylabel('PC2') plt.show
st = [] end = [] for line in strings: data = line.split(" ") st.append(round(float(data[2]), 2)) #発話区間の始まりの配列 end.append(round(float(data[3]), 2)) #発話区間の終わりの配列 f.close ivpath = "/home/nozaki/speaker_clustering/02_i-vector_system_with_ALIZE3.0/iv/soturon_news_ivdata/" ivpath = "{0}{1}/".format(ivpath, newsname) ivmodule = iv_module(0, 0.8, 5, 0.05, ivpath, wavpath) f = open( "/mnt/disk2/bati_dic/news/work2/noza/{0}/matoldresult_{0}_mar4w_02".format( newsname), "r") #音源識別のテキスト(_02) strings = f.readlines() audio_d = [] #音源識別結果の配列 for item in strings: audio_d.append(int(item)) interval_list = [] #発話の間の種類の配列 interval_time = [] #発話の間の秒数の配列 sox_cnt = 0 for i, item1 in enumerate(st): cnt_speech_interval = 0
def main(speaker_name, ivpath): ivpath = "{0}{1}/".format(ivpath, speaker_name) test_anchor_num = 1 #評価したいアンカーのクラスタ番号の指定 anstxtpath = "/home/nozaki/speaker_clustering/news_kotae/{0}/re_anchor{1}.txt".format( speaker_name, test_anchor_num) ivmodule = iv_module(roop_num, iv_th, tyouhuku_th, anchor_th) filelist, num, filename = ivmodule.get_filelist( ivpath) #filelist:ループされていく毎に減っていくwavデータのリスト ori_filelist, ori_num, _ = ivmodule.get_filelist( ivpath) #ori_filelist:クラスタ分けする全ての音声ファイル anslist = ivmodule.read_ansfile(anstxtpath) cluster = np.zeros(ori_num) all_anchor = [] anchor_num = 0 print("filename:{}".format(filename)) for i in range(roop_num): num = ivmodule.cnt_filenum(filelist) tyouhuku = ivmodule.cnt_tyouhuku_num( ivpath, filelist) #リストにある音声ファイルのcos類似度による重複回数のリストを返す maxfile = filelist[np.argmax(tyouhuku)] #重複回数が最大となる音声ファイルを探し、 th_list = ivmodule.get_thlist( ivpath, maxfile, filelist) #もっとも重複した音声ファイルが多い音声ファイルの重複したwavファイルのリストを返す tyouhukulist = ivmodule.get_tyouhukulist(ivpath, filelist, th_list) #重重したwavファイルのリストを返す lis = np.array(ivmodule.make_tyouhukulist( filelist, tyouhukulist, num)) #重複回数が閾値以上のファイルのリストを返してnumpy.arrayに変換 if ((ivmodule.cnt_filenum(lis) / ori_num) < anchor_th): if (anchor_num == 0): anchor_num = i break for item in lis: delnum = ivmodule.search_filenum(ori_filelist, item, ori_num) cluster[delnum] = i + 1 #クラスタ分けされた音声ファイルにラベルを付ける filelist.remove(item) #クラスタ分けされた音声ファイルをリストから削除する all_anchor.append(item) print("anchor_num is:{}\n".format(anchor_num)) #ivmodule.all_clusnum_to_filename(cluster,ori_num,ori_filelist,anchor_num)#クラスタ分けの数字からファイル名をクラスタ毎に取り出す queslist = ivmodule.clusnum_to_filename( cluster, ori_num, ori_filelist, anchor_num, test_anchor_num) #クラスタ分けの数字からファイル名をクラスタ毎に取り出す acc, recall, precision, f_measure = ivmodule.test(ori_filelist, anslist, queslist) print("acc:{0:.3f}\nrecall:{1:.3f}\nprecision:{2:.3f}\nf_measure:{3:.3f}". format(acc, recall, precision, f_measure))
ivpath = "/home/nozaki/speaker_clustering/02_i-vector_system_with_ALIZE3.0/iv/soturon_news_ivdata/" newslist = ["NHK0826","NHK1112","NHK1113","NHK1114"] calclist = [] f_measurelist = [] print(iv_th) #def main(speaker_name,ivpath): for speaker_name in newslist: ivpath = "/home/nozaki/speaker_clustering/02_i-vector_system_with_ALIZE3.0/iv/soturon_news_ivdata/" ivpath = "{0}{1}/".format(ivpath,speaker_name) anstxtpath = "/home/nozaki/speaker_clustering/news_kotae/{0}/re_anchor{1}.txt".format(speaker_name,test_anchor_num) if(search_mode == "all_anchor"): anstxtpath = "/home/nozaki/speaker_clustering/news_kotae/{0}/all_anchor.txt".format(speaker_name)#if all anchor search ivmodule = iv_module(roop_num,iv_th,tyouhuku_th,anchor_th,ivpath,wavpath) filelist,num,filename = ivmodule.get_filelist(ivpath)#filelist:ループされていく毎に減っていくwavデータのリスト ori_filelist,ori_num,_ = ivmodule.get_filelist(ivpath) #ori_filelist:クラスタ分けする全ての音声ファイル anslist = ivmodule.read_ansfile(anstxtpath) cluster = np.zeros(ori_num) all_anchor = [] anchor_num = 0 ori_filelist,ori_num = ivmodule.timecut(wavpath,ori_filelist,time_th) filelist,num = ivmodule.timecut(wavpath,ori_filelist,time_th) for i in range(roop_num): num = ivmodule.cnt_filenum(filelist)
clusters = 5 import sys print("clusnum,acc,recall,precision,f-measure") if (anchor_num == 1): filename = ["NHK0826", "NHK1112", "NHK1113", "NHK1114"] else: filename = ["NHK1112", "NHK1114"] for roop, single_filename in enumerate(filename): print(single_filename) cluster1, cluster2, cluster3, cluster4, cluster5 = [], [], [], [], [] sub_cluster1, sub_cluster2 = [], [] wavpath = "/home/nozaki/speaker_clustering/02_i-vector_system_with_ALIZE3.0/data/news/" ivpath = "/home/nozaki/speaker_clustering/02_i-vector_system_with_ALIZE3.0/iv/soturon_news_ivdata/{0}/".format( single_filename) ivmodule = iv_module(100, 0.6, 10, 10, ivpath, wavpath) filelist, num, filename = get_filelist(ivpath) all_anchor = [] ori_filelist, ori_num = ivmodule.timecut(wavpath, filelist, time_th) filelist, num = ivmodule.timecut(wavpath, filelist, time_th) from sklearn.cluster import KMeans ivlist = [] for item in ori_filelist: ivlist.append(ivmodule.get_ivdata(ivpath, item)) ivlist = np.array(ivlist) pred = KMeans(n_clusters=clusters).fit_predict(ivlist) cnt = [0] * clusters for i, item in enumerate(pred):
import os from kenkyu_module import iv_module #path = "/home/nozaki/speaker_clustering/02_i-vector_system_with_ALIZE3.0/data/news/*.wav" #path = "/home/nozaki/newsdata/cutwav/vdet_wav/*.wav" #path = "./*.y" path = "/home/nozaki/speaker_clustering/news_i-vector/iv/raw/*.y" path_list = glob.glob(path) path_list.sort() #path_list1=["./JF012_0043.y"] time_list = [] name = "" list_same,list_other = [],[] ivpath = "" #ivpath = "/home/nozaki/speaker_clustering/news_i-vector/iv/raw" ivmodule = iv_module(0,0.8,5,0.05,path,"") for item in path_list: result1 = item.replace("./","") sp1 = re.sub("_[a-xA-Z0-9_]*.y","",result1) result1 = result1.replace(".y","") print("now:",result1) for item2 in path_list: if(item != item2): result2 = item2.replace("./","") sp2 = re.sub("_[a-xA-Z0-9_]*.y","",result2) result2 = result2.replace(".y","") if(sp1 == sp2): list_same.append(ivmodule.calc_cos(ivpath,result1,result2)) else: list_other.append(ivmodule.calc_cos(ivpath,result1,result2))
recall = float(tp/(tp+fn)) precision = float(tp/(tp+fp)) if(recall + precision == 0): print("Error ansclusterとquesclusterのリストが完全不一致です。") return 0,0,0,0 f_measure = float((2*recall*precision)/(recall + precision)) return acc,recall,precision,f_measure single_filename = "NHK1114" print(single_filename) print("2") ivmodule = iv_module(100,0.6,10,10) cluster1,cluster2,cluster3,cluster4,cluster5 = [],[],[],[],[] sub_cluster1,sub_cluster2 = [],[] wavpath = "/home/nozaki/speaker_clustering/02_i-vector_system_with_ALIZE3.0/data/news/" ivpath = "/home/nozaki/speaker_clustering/02_i-vector_system_with_ALIZE3.0/iv/soturon_news_ivdata/{0}/".format(single_filename) filelist,num,filename = get_filelist(ivpath) miniv,minitem1,minitem2 = k_medoidos(ivpath,filelist) sub_cluster1,sub_cluster2 = mksubclus(ivpath,filelist,minitem1,minitem2) cluster5,cluster4 = better_clus(sub_cluster1,sub_cluster2) miniv,minitem1,minitem2 = k_medoidos(ivpath,cluster4) sub_cluster1,sub_cluster2 = mksubclus(ivpath,cluster4,minitem1,minitem2) cluster4,cluster3 = better_clus(sub_cluster1,sub_cluster2)
def main(speaker_name,ivpath): ivpath = "{0}{1}/".format(ivpath,speaker_name) anstxtpath = "/home/nozaki/speaker_clustering/news_kotae/{0}/re_anchor{1}.txt".format(speaker_name,test_anchor_num) ivmodule = iv_module(roop_num,iv_th,tyouhuku_th,anchor_th) filelist,num,filename = ivmodule.get_filelist(ivpath)#filelist:ループされていく毎に減っていくwavデータのリスト ori_filelist,ori_num,_ = ivmodule.get_filelist(ivpath) #ori_filelist:クラスタ分けする全ての音声ファイル anslist = ivmodule.read_ansfile(anstxtpath) cluster = np.zeros(ori_num) all_anchor = [] anchor_num = 0 print("filename:{}".format(filename)) for i in range(roop_num): num = ivmodule.cnt_filenum(filelist) tyouhuku = ivmodule.cnt_tyouhuku_num(ivpath,filelist)#リストにある音声ファイルのcos類似度による重複回数のリストを返す maxfile = filelist[np.argmax(tyouhuku)]#重複回数が最大となる音声ファイルを探し、 th_list = ivmodule.get_thlist(ivpath,maxfile,filelist)#もっとも重複した音声ファイルが多い音声ファイルの重複したwavファイルのリストを返す tyouhukulist = ivmodule.get_tyouhukulist(ivpath,filelist,th_list)#重重したwavファイルのリストを返す lis = np.array(ivmodule.make_tyouhukulist(filelist,tyouhukulist,num))#重複回数が閾値以上のファイルのリストを返してnumpy.arrayに変換 if((ivmodule.cnt_filenum(lis)/ori_num) < anchor_th): if(anchor_num == 0): anchor_num = i break for item in lis: delnum = ivmodule.search_filenum(ori_filelist,item,ori_num) cluster[delnum] = i+1#クラスタ分けされた音声ファイルにラベルを付ける filelist.remove(item)#クラスタ分けされた音声ファイルをリストから削除する all_anchor.append(item) #for plot program clus0or1 = [] for item in ori_filelist: flag = 0 for item2 in anslist: if(item == item2): clus0or1.append("1") flag = 1 break if(flag == 0): clus0or1.append("0") clus0or1 = np.array(clus0or1) iv = [] for item in ori_filelist: iv.append(ivmodule.get_ivdata(ivpath,item)) chart1,chart2 = [],[] for i,item in enumerate(ori_filelist):#図の重ねがけで使う if(clus0or1[i]=="0"): chart1.append(i) else: chart2.append(i) df_wine_all = pd.DataFrame(iv) X=df_wine_all.iloc[0:].values # 3:データの整形------------------------------------------------------- sc=preprocessing.StandardScaler() sc.fit(X) X=sc.transform(X) #print(X) labels,center = affinity_propagation(X) clusnum = max(labels)+1 print("a number of cluster is {0}".format(clusnum)) print("center iv is") num = [] for item in range(clusnum): sub = 0 for item2 in labels: if(item == item2): sub += 1 num.append(sub) cluslist = [] for i,item in enumerate(center): cluslist.append(ori_filelist[item]) print(ori_filelist[item],labels[item],num[i]) """
def main(speaker_name, ivpath): ivpath = "{0}{1}/".format(ivpath, speaker_name) anstxtpath = "/home/nozaki/speaker_clustering/news_kotae/{0}/re_anchor{1}.txt".format( speaker_name, test_anchor_num) ivmodule = iv_module(roop_num, iv_th, tyouhuku_th, anchor_th, ivpath, wavpath) filelist, num, filename = ivmodule.get_filelist( ivpath) #filelist:ループされていく毎に減っていくwavデータのリスト ori_filelist, ori_num, _ = ivmodule.get_filelist( ivpath) #ori_filelist:クラスタ分けする全ての音声ファイル anslist = ivmodule.read_ansfile(anstxtpath) cluster = np.zeros(ori_num) all_anchor = [] anchor_num = 0 print("filename:{}".format(filename)) for i in range(roop_num): num = ivmodule.cnt_filenum(filelist) tyouhuku = ivmodule.cnt_tyouhuku_num( ivpath, filelist) #リストにある音声ファイルのcos類似度による重複回数のリストを返す maxfile = filelist[np.argmax(tyouhuku)] #重複回数が最大となる音声ファイルを探し、 th_list = ivmodule.get_thlist( ivpath, maxfile, filelist) #もっとも重複した音声ファイルが多い音声ファイルの重複したwavファイルのリストを返す tyouhukulist = ivmodule.get_tyouhukulist(ivpath, filelist, th_list) #重重したwavファイルのリストを返す lis = np.array(ivmodule.make_tyouhukulist( filelist, tyouhukulist, num)) #重複回数が閾値以上のファイルのリストを返してnumpy.arrayに変換 if ((ivmodule.cnt_filenum(lis) / ori_num) < anchor_th): if (anchor_num == 0): anchor_num = i break for item in lis: delnum = ivmodule.search_filenum(ori_filelist, item, ori_num) cluster[delnum] = i + 1 #クラスタ分けされた音声ファイルにラベルを付ける filelist.remove(item) #クラスタ分けされた音声ファイルをリストから削除する all_anchor.append(item) print("anchor_num is:{}\n".format(anchor_num)) #ivmodule.all_clusnum_to_filename(cluster,ori_num,ori_filelist,anchor_num)#クラスタ分けの数字からファイル名をクラスタ毎に取り出す queslist = ivmodule.clusnum_to_filename( cluster, ori_num, ori_filelist, anchor_num, test_anchor_num) #クラスタ分けの数字からファイル名をクラスタ毎に取り出す #acc,recall,precision,f_measure,tp,tn,fp,fn = ivmodule.test(ori_filelist,anslist,queslist) #print("acc:{0:.3f}\nrecall:{1:.3f}\nprecision:{2:.3f}\nf_measure:{3:.3f}".format(acc,recall,precision,f_measure)) #for plot program clus0or1 = [] for item in ori_filelist: flag = 0 for item2 in anslist: if (item == item2): clus0or1.append("1") flag = 1 break if (flag == 0): clus0or1.append("0") clus0or1 = np.array(clus0or1) iv = [] for item in ori_filelist: iv.append(ivmodule.get_ivdata(ivpath, item)) chart1, chart2 = [], [] for i, item in enumerate(ori_filelist): #図の重ねがけで使う if (clus0or1[i] == "0"): chart1.append(i) else: chart2.append(i) df_wine_all = pd.DataFrame(iv) X = df_wine_all.iloc[0:].values # 3:データの整形------------------------------------------------------- sc = preprocessing.StandardScaler() sc.fit(X) X = sc.transform(X) # 解説4:主成分分析を実施------------------------------- pca = decomposition.PCA(n_components=10) X_transformed = pca.fit_transform(X) #print(X_transformed) # 6: 結果をプロットする----------------------------- #matplotlib inline plt.figure(figsize=(5, 5)) plt.subplot(1, 1, 1) X = X_transformed[:, 0] Y = X_transformed[:, 1] clusters = 6 ivlist = np.array(X_transformed) pred = KMeans(n_clusters=clusters).fit_predict(ivlist) X_1, Y_1 = [], [] cnt = [0] * clusters for i, item in enumerate(pred): cnt[item] += 1 cnt = np.array(cnt) argcnt = cnt.argsort()[::-1] plt.title("scatter plot of 2-dimensional i-vector") colors = [ "red", "green", "blue", "magenta", "orangered", "yellow", "cyan", "lime", "cornflowerblue", "black", "gray" ] chart1, chart2 = [], [] for j in argcnt: chart1 = [] X_1, Y_1 = [], [] for i, item in enumerate(ori_filelist): #図の重ねがけで使う if (pred[i] == j): chart1.append(i) for item in chart1: X_1.append(X[item]) Y_1.append(Y[item]) plt.scatter(X_1, Y_1, marker=".", c=colors[j]) X_1, Y_1 = [], [] #plt.scatter(X_1,Y_1,marker="o",c="red") #plt.scatter(X_2,Y_2,marker="x",c="black") #plt.title("scatter plot of 2-dimensional i-vector") plt.grid(which='major', color='black', linestyle=':') #plt.scatter(X,Y,c=clus0or1) plt.xlabel('iv1') plt.ylabel('iv2') plt.legend()