Changeset 5331
- Timestamp:
- Sep 2, 2022 10:07:31 AM (15 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/GSASIIseqGUI.py
r5330 r5331 1570 1570 import sklearn.cluster as SKC 1571 1571 import sklearn.ensemble as SKE 1572 import sklearn.covariance as SKCO1573 1572 import sklearn.neighbors as SKN 1574 1573 import sklearn.svm as SKVM 1574 import sklearn.metrics as SKM 1575 1575 1576 1576 SKLearnCite = '''If you use Scikit-Learn Cluster Analysis, please cite: … … 1818 1818 whitMat = SCV.whiten(ClusData['DataMatrix']) 1819 1819 if ClusData['Scikit'] == 'K-Means': 1820 result = SKC.KMeans(n_clusters=ClusData['NumClust'],algorithm='elkan' ).fit(whitMat)1820 result = SKC.KMeans(n_clusters=ClusData['NumClust'],algorithm='elkan',init='k-means++').fit(whitMat) 1821 1821 print('K-Means sum squared dist. to means %.2f'%result.inertia_) 1822 1822 elif ClusData['Scikit'] == 'Spectral clustering': … … 1833 1833 1834 1834 ClusData['codes'] = result.labels_ 1835 ClusData['Metrics'] = Metrics(whitMat,result) 1835 1836 wx.CallAfter(UpdateClusterAnalysis,G2frame,ClusData) 1837 1838 def Metrics(whitMat,result): 1839 if np.max(result.labels_) >= 1: 1840 Scoeff = SKM.silhouette_score(whitMat,result.labels_,metric='euclidean') 1841 print('Silhouette Coefficient: %.3f'%Scoeff) 1842 CHcoeff = SKM.calinski_harabasz_score(whitMat,result.labels_) 1843 print('Calinski-Harabasz index (Variance ratio): %.3f'%CHcoeff) 1844 DBcoeff = SKM.davies_bouldin_score(whitMat,result.labels_) 1845 print('Davies-Bouldin Index: %.3f'%DBcoeff) 1846 return Scoeff,CHcoeff,DBcoeff 1847 else: 1848 print('number of clusters found must be > 1 for metrics to be determined') 1849 return None 1836 1850 1837 1851 scikitSizer = wx.BoxSizer(wx.VERTICAL) … … 1858 1872 if ClusData['Scikit'] in ['Spectral clustering','Agglomerative clustering']: 1859 1873 useTxt = '%s used %s for distance method'%(ClusData['Scikit'],ClusData['Method']) 1860 print(useTxt)1861 1874 scikitSizer.Add(wx.StaticText(G2frame.dataWindow,label=useTxt)) 1875 if ClusData.get('Metrics',None) is not None: 1876 metrics = ClusData['Metrics'] 1877 scikitSizer.Add(wx.StaticText(G2frame.dataWindow, 1878 label='Metrics: Silhoutte: %.3f, Variance: %.3f, Davies-Bouldin: %.3f'%(metrics[0],metrics[1],metrics[2]))) 1862 1879 return scikitSizer 1863 1880 … … 1877 1894 data = G2frame.GPXtree.GetItemPyData(G2gd.GetGPXtreeItemId(G2frame, item,'PDF Controls')) 1878 1895 G2plt.PlotISFG(G2frame,data,plotType='G(R)') 1879 1896 1897 #need 15 colors; values adjusted to match xkcs/PCA plot colors. NB: RGB reverse order from xkcd values. 1898 Colors = [['xkcd:blue',0xff0000],['xkcd:red',0x0000ff],['xkcd:green',0x00a000],['xkcd:cyan',0xd0d000], 1899 ['xkcd:magenta',0xa000a0],['xkcd:black',0x000000],['xkcd:pink',0xb469ff],['xkcd:brown',0x13458b], 1900 ['xkcd:teal',0x808000],['xkcd:orange',0x008cff],['xkcd:grey',0x808080],['xkcd:violet',0xe22b8a], 1901 ['xkcd:aqua',0xaaaa00],['xkcd:blueberry',0xcd5a6a],['xkcd:bordeaux',0x00008b]] 1880 1902 NClust = np.max(ClusData['codes']) 1881 1903 memSizer = wx.BoxSizer(wx.VERTICAL) 1882 memSizer.Add(wx.StaticText(G2frame.dataWindow,label='Cluster populations :'))1904 memSizer.Add(wx.StaticText(G2frame.dataWindow,label='Cluster populations (colors refer to cluster colors in PCA plot):')) 1883 1905 for i in range(NClust+1): 1884 1906 nPop= len(ClusData['codes'])-np.count_nonzero(ClusData['codes']-i) 1885 memSizer.Add(wx.StaticText(G2frame.dataWindow,label='Cluster #%d has %d members'%(i,nPop))) 1907 txt = wx.StaticText(G2frame.dataWindow,label='Cluster #%d has %d members'%(i,nPop)) 1908 txt.SetForegroundColour(wx.Colour(Colors[i][1])) 1909 memSizer.Add(txt) 1886 1910 headSizer = wx.BoxSizer(wx.HORIZONTAL) 1887 1911 headSizer.Add(wx.StaticText(G2frame.dataWindow,label='Select cluster to list members: '),0,WACV) … … 1898 1922 ClusList.append(item) 1899 1923 cluslist = wx.ListBox(G2frame.dataWindow, choices=ClusList) 1924 cluslist.SetForegroundColour(wx.Colour(Colors[shoNum][1])) 1900 1925 cluslist.Bind(wx.EVT_LISTBOX,OnSelection) 1901 1926 memSizer.Add(cluslist) … … 1916 1941 ClusData['codes'] = SKN.LocalOutlierFactor().fit_predict(ClusData['DataMatrix']) 1917 1942 wx.CallAfter(UpdateClusterAnalysis,G2frame,ClusData,shoNum) 1918 1919 1943 1920 1944 outSizer = wx.BoxSizer(wx.VERTICAL) … … 2035 2059 else: 2036 2060 mainSizer.Add(wx.StaticText(G2frame.dataWindow,label='No outlier data found')) 2037 2038 2039 2040 2061 2041 2062 bigSizer.Add(mainSizer)
Note: See TracChangeset
for help on using the changeset viewer.