From 258f3ca89f41078d3d8a7c2f53744cef5ede980e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A2=81=E4=BC=8A=E9=9B=AF?= Date: Mon, 24 Oct 2022 17:53:54 +0800 Subject: [PATCH 1/3] start START2 --- BaseML/Classification.py | 136 +++++-- BaseML/Regression.py | 64 +++- BaseML/__pycache__/AdaBoost.cpython-37.pyc | Bin 0 -> 1929 bytes BaseML/__pycache__/CART.cpython-37.pyc | Bin 0 -> 1186 bytes .../__pycache__/Classification.cpython-37.pyc | Bin 0 -> 5247 bytes BaseML/__pycache__/GaussianNB.cpython-37.pyc | Bin 0 -> 2258 bytes .../__pycache__/KNNClassifier.cpython-37.pyc | Bin 0 -> 1552 bytes BaseML/__pycache__/PCA.cpython-37.pyc | Bin 0 -> 1170 bytes BaseML/__pycache__/Perceptron.cpython-37.pyc | Bin 0 -> 1211 bytes BaseML/__pycache__/Regression.cpython-37.pyc | Bin 0 -> 2680 bytes BaseML/__pycache__/SVM.cpython-37.pyc | Bin 0 -> 1833 bytes BaseML/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 545 bytes Downloads/China_cities.csv | 352 ++++++++++++++++++ checkpoint.pkl | Bin 0 -> 10267 bytes demo/__init__.py | 0 demo/iris_cls_demo.py | 26 ++ demo/kemans.py | 12 - demo/kmeans.py | 45 +++ test/test_datasets.py | 17 + 19 files changed, 596 insertions(+), 56 deletions(-) create mode 100644 BaseML/__pycache__/AdaBoost.cpython-37.pyc create mode 100644 BaseML/__pycache__/CART.cpython-37.pyc create mode 100644 BaseML/__pycache__/Classification.cpython-37.pyc create mode 100644 BaseML/__pycache__/GaussianNB.cpython-37.pyc create mode 100644 BaseML/__pycache__/KNNClassifier.cpython-37.pyc create mode 100644 BaseML/__pycache__/PCA.cpython-37.pyc create mode 100644 BaseML/__pycache__/Perceptron.cpython-37.pyc create mode 100644 BaseML/__pycache__/Regression.cpython-37.pyc create mode 100644 BaseML/__pycache__/SVM.cpython-37.pyc create mode 100644 BaseML/__pycache__/__init__.cpython-37.pyc create mode 100644 Downloads/China_cities.csv create mode 100644 checkpoint.pkl create mode 100644 demo/__init__.py create mode 100644 demo/iris_cls_demo.py delete mode 100644 demo/kemans.py create mode 100644 demo/kmeans.py create mode 100644 test/test_datasets.py diff --git a/BaseML/Classification.py b/BaseML/Classification.py index 1137280..ac89b44 100644 --- a/BaseML/Classification.py +++ b/BaseML/Classification.py @@ -6,11 +6,13 @@ from sklearn.ensemble import AdaBoostClassifier from sklearn.tree import DecisionTreeClassifier from sklearn.neighbors import KNeighborsClassifier +from sklearn.neural_network import MLPClassifier from sklearn.model_selection import train_test_split from sklearn.svm import SVC from sklearn.cluster import KMeans from sklearn.metrics import silhouette_score, silhouette_samples import joblib +import random class cls: def __init__(self, algorithm='KNN', n_neighbors=5, n_estimators=100, N_CLUSTERS=5): @@ -18,7 +20,7 @@ def __init__(self, algorithm='KNN', n_neighbors=5, n_estimators=100, N_CLUSTERS= self.cwd = os.path.dirname(os.getcwd()) # 获取当前文件的绝对路径 self.file_dirname = os.path.dirname(os.path.abspath(__file__)) self.dataset_path = ' ' - self.test_size = ' ' + self.test_size = 0.2 self.test_set = ' ' self.x_train, self.x_test, self.y_train, self.y_test = 0, 0, 0, 0 if self.algorithm == 'KNN': @@ -34,22 +36,17 @@ def __init__(self, algorithm='KNN', n_neighbors=5, n_estimators=100, N_CLUSTERS= elif self.algorithm == 'Kmeans': self.n = N_CLUSTERS self.model = KMeans(self.n) + elif self.algorithm == 'MLP': + self.model = MLPClassifier(solver='lbfgs') def train(self, seed=0, data_type='csv'): - if self.algorithm == 'AdaBoost' or 'SVM' or 'NaiveBayes': + if self.algorithm in ['AdaBoost','SVM','NaiveBayes', 'MLP']: np.random.seed(seed) - if data_type == 'csv': - dataset = pd.read_csv(self.dataset_path, sep=',', header=None).values - np.random.shuffle(dataset) + np.random.shuffle(self.dataset) - data, label = dataset[:, :-1], dataset[:, -1] - train_index = int((1 - self.test_size) * len(dataset)) - train_data, train_label = data[:train_index, ], label[:train_index] - self.test_set = { - 'data': data[train_index:, ], - 'label': label[train_index:] - } - self.model.fit(train_data, train_label) + self.x_train, self.x_test, self.y_train, self.y_test = \ + train_test_split(self.x_train, self.y_train, test_size=0.2, random_state=0) + self.model.fit(self.x_train, self.y_train) elif self.algorithm == 'CART': self.model.fit(self.dataset) @@ -58,51 +55,110 @@ def train(self, seed=0, data_type='csv'): elif self.algorithm == 'KNN': self.x_train, self.x_test, self.y_train, self.y_test = \ - train_test_split(self.dataset['data'], self.dataset['target'], test_size=0.2, random_state=0) + train_test_split(self.x_train, self.y_train, test_size=0.2, random_state=0) self.model.fit(self.x_train, self.y_train) acc = self.model.score(self.x_test, self.y_test) print('准确率为:{}%'.format(acc * 100)) elif self.algorithm == 'Kmeans': - self.dataset = pd.read_csv(self.dataset_path) - self.x_train = self.dataset.drop('省级行政区', axis=1) - self.x_train = self.x_train.drop("城市", axis=1) - self.x_np = np.array(self.x_train) - self.model.fit(self.x_np) + # 对列数据进行文本过滤,只抽取有数据的列 + delete_list = [] + if self.x_train.ndim >= 2: + for col_idx in range(self.x_train.shape[1]): + col = self.x_train[:,col_idx] + # 随机取一个元素,查看其type + if isinstance(random.choice(col),str): + delete_list.append(col_idx) - def inference(self, data): - if self.algorithm == 'AdaBoost' or 'SVM' or 'NaiveBayes': - pred = self.model.predict(self.test_set['data']) - acc = accuracy_score(self.test_set['label'], pred) - print('准确率为:{}%'.format(acc * 100)) + self.x_train = np.delete(self.x_train, delete_list, axis=1) + self.model.fit(self.x_train) - elif self.algorithm == 'KNN': - result = self.model.predict(data) - print(result) - print("分类结果:{}".format(self.dataset['target_names'][result])) + def inference(self, data = np.nan): + if data is not np.nan: # 对data进行了指定 + self.x_test = data - elif self.algorithm == 'CART': - self.model.fit_transform(data) - print(self.model.n_features_) - print(self.model.n_samples_) + if self.algorithm in ['AdaBoost','SVM','NaiveBayes', 'MLP','KNN','CART']: + pred = self.model.predict(self.x_test) + return pred elif self.algorithm == 'Kmeans': labels = self.model.labels_ # 获取聚类标签 - print(silhouette_score(self.x_np, labels)) # 获取聚类结果总的轮廓系数 + print(silhouette_score(self.x_train, labels)) # 获取聚类结果总的轮廓系数 print(self.model.cluster_centers_) # 输出类簇中心 for i in range(self.n): print(f" CLUSTER-{i+1} ".center(60, '=')) print(self.dataset[labels == i]) - def load_dataset(self, path, test_size=0.2, dataset=''): - self.dataset_path = path - self.test_size = test_size - self.dataset=dataset + if data is not np.nan: + pred = self.model.predict(data) + return pred + + # 从文件加载数据集,支持csv文件和txt文件 + def load_dataset_from_file(self, path, x_column = [], y_column = []): + if type == 'csv': + self.dataset = pd.read_csv(path).values # .values就转成numpy格式了 + self.get_data(X,y,x_column,y_column) + elif type == 'txt': + self.dataset = np.loadtxt(path) + X = X.values + y = y.values + self.get_data(X,y,x_column,y_column) - def save(self): + # 从数据加载数据集,支持['numpy','list','DataFrame'] + def load_dataset_from_data(self, X, y = None, x_column = [], y_column = []): + if type(X) != type(y): + raise TypeError("数据格式不同,无法加载") + if isinstance(X,list): + X = np.array(X) + y = np.array(y) + self.get_data(X,y,x_column,y_column) + elif isinstance(X,np.ndarray): + self.get_data(X,y,x_column,y_column) + elif isinstance(X,pd.DataFrame): + X = X.values + y = y.values + self.get_data(X,y,x_column,y_column) + + + + # 支持的type有['csv', 'numpy','pandas','list','txt],后面一律转为numpy格式 + def load_dataset(self, X, y = None, type = None, x_column = [], y_column = []): + if len(x_column) == 0: + raise ValueError("请传入数据列号") + if type == 'csv': + self.dataset = pd.read_csv(X).values # .values就转成numpy格式了 + self.get_data(X,y,x_column,y_column) + elif type == 'numpy': # 统一转成numpy格式 + self.get_data(X,y,x_column,y_column) + elif type == 'pandas': + X = X.values + y = y.values + self.get_data(X,y,x_column,y_column) + elif type == 'list': + X = np.array(X) + y = np.array(y) + self.get_data(X,y,x_column,y_column) + elif type == 'txt': + self.dataset = np.loadtxt(X) + X = X.values + y = y.values + self.get_data(X,y,x_column,y_column) + + + def save(self,path="checkpoint.pkl"): print("Saving model checkpoints...") - joblib.dump(self.model, '../checkpoint.pkl', compress=3) + joblib.dump(self.model, path, compress=3) def load(self, path): - joblib.load(path) \ No newline at end of file + self.model = joblib.load(path) + + def get_data(self,X,y,x_column,y_column): + if len(X): + self.x_train = X[:,x_column] + if len(y): # + if y.ndim == 1: + y = y.reshape(-1,1) + self.y_train = y[:,y_column] + if self.y_train.shape[0]: + self.dataset = np.concatenate((self.x_train,self.y_train),axis=1) # 按列进行拼接 diff --git a/BaseML/Regression.py b/BaseML/Regression.py index ef918ad..5fb9496 100644 --- a/BaseML/Regression.py +++ b/BaseML/Regression.py @@ -52,10 +52,66 @@ def inference(self, data): print(self.model.n_features_) print(self.model.n_samples_) - def load_dataset(self,path,test_size=0.2, dataset=''): - self.dataset_path = path - self.test_size = test_size - self.dataset = dataset + # 从文件加载数据集,支持csv文件和txt文件 + def load_dataset_from_file(self, path, x_column = [], y_column = []): + if type == 'csv': + self.dataset = pd.read_csv(path).values # .values就转成numpy格式了 + self.get_data(X,y,x_column,y_column) + elif type == 'txt': + self.dataset = np.loadtxt(path) + X = X.values + y = y.values + self.get_data(X,y,x_column,y_column) + + # 从数据加载数据集,支持['numpy','list','DataFrame'] + def load_dataset_from_data(self, X, y = None, x_column = [], y_column = []): + if type(X) != type(y): + raise TypeError("数据格式不同,无法加载") + if isinstance(X,list): + X = np.array(X) + y = np.array(y) + self.get_data(X,y,x_column,y_column) + elif isinstance(X,np.ndarray): + self.get_data(X,y,x_column,y_column) + elif isinstance(X,pd.DataFrame): + X = X.values + y = y.values + self.get_data(X,y,x_column,y_column) + + + + # 支持的type有['csv', 'numpy','pandas','list','txt],后面一律转为numpy格式 + def load_dataset(self, X, y = None, type = None, x_column = [], y_column = []): + if len(x_column) == 0: + raise ValueError("请传入数据列号") + if type == 'csv': + self.dataset = pd.read_csv(X).values # .values就转成numpy格式了 + self.get_data(X,y,x_column,y_column) + elif type == 'numpy': # 统一转成numpy格式 + self.get_data(X,y,x_column,y_column) + elif type == 'pandas': + X = X.values + y = y.values + self.get_data(X,y,x_column,y_column) + elif type == 'list': + X = np.array(X) + y = np.array(y) + self.get_data(X,y,x_column,y_column) + elif type == 'txt': + self.dataset = np.loadtxt(X) + X = X.values + y = y.values + self.get_data(X,y,x_column,y_column) + + def get_data(self,X,y,x_column,y_column): + if len(X): + self.x_train = X[:,x_column] + if len(y): # + if y.ndim == 1: + y = y.reshape(-1,1) + self.y_train = y[:,y_column] + if self.y_train.shape[0]: + self.dataset = np.concatenate((self.x_train,self.y_train),axis=1) # 按列进行拼接 def save(self): diff --git a/BaseML/__pycache__/AdaBoost.cpython-37.pyc b/BaseML/__pycache__/AdaBoost.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d5ff5e1732621c492ebdf7e6f88ca77682bd7a70 GIT binary patch literal 1929 zcmZ8iOK%)S5bmD$uE&mJoDfS$1OX9?60gJo5JG|23P{KpBo0V(8I7lV<8fwZm+n~y zJF_P{4cV*J6seaX~>#M5WSX}HfjN|ck{%ye6 zpR}0`7mH8v>CZp}6TD;zx3iPDcJ>kvvs3!RAPI(H5^~~m%V^k1I-GsZgeUxCCj28O z=?eZ0>jh`f#kPBnS<3Q!qO$xT)%i$Cvoe%fmFn*%nUW%vN{v*Ho0U5v+Zc^>y;){j z7lT5ooHWeF+{gEDBCUUkBe-ym8GKw4z6g#vyu2hL(ZR|W%VI&qSOsDc{#-WE%tFr3 zmD23v+r+20Kx($fPn?>axToxtH!SsLCph=(;FR0bu#U*GaGyBf=?D+BYw3cev0$+1 zZ=VV1RAi;+Byp8WT^GZw9w}{Nl~rOiOm&^r@&&)%TQtr{8*iM|yCxKcs&8 zTm4yB*T)A2t`${Lr)dW&bqvCs6@Ha3@c_TW%X8itpN$UQr}uM0mUVdGjp%3Jn`ZoNm&z*%F>?8Kv;!=~QU2aZ0p zbgr?w+qg%3l^yYE&>+{F08$)Me!I33;WTQzCLq1-UAtamBKVmyVF9}0lf@=%qEm+| z1X&Pnt2Mmg1;2?>aJ3wpU{_{BsHb>V`5Z^<|n*xC#skfboqSR|2x zV2V(w6=*cUepXJTHlf~~3qtE{L1q>$ey-F8D<$@zu#(k4wyUL_&l@{wbj3^N|{h_CY4xdHfJ zb7H>Y94^h_x6FXO)VV|47zFto_FZfcOm>1I+ymrmD95SOpy&Yp?b@}cF5q#F902bL z@5Bed{wny6kS5g)@CM)&b?`r454<6Gy_U~H6m7SUzXhW<0uy@1-;aNIe){Y4A0Pkq z+wcE8d-`ztwnE=TY?Zus7;TNT{^KaMkB=SCy4~bCM zxH t`GQz4tGjvTdh@l!2#=!t%d00_8GV7(VF52S1e+&`yb;P-B|zt literal 0 HcmV?d00001 diff --git a/BaseML/__pycache__/CART.cpython-37.pyc b/BaseML/__pycache__/CART.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..51b93c1c6d8d765d26ebfc5a6c057c942d0a3ac8 GIT binary patch literal 1186 zcmZux&2H2%5VoCUlWwzx7EuWf91)R#eE|ghp&+5MAm}MVvfS9)ddVii_V!P`wHMx^ zd*qdJ<-{v+V#d2$wH1~;GxkizpT8MrtJmui7?;hU_!$uL8yAZKYq9~;J_R9(q$L^C zoKmz|$#V9d$UugdM1~hE4cQ10~E2?x89v_KGdb+JWst|M8{G%VU^3{6Yh-ARo($ZS!a-s zHX7Gbl|W%=RXO}c%strs`=)l3RW96MprI>q)wU=?y4j|5(e-WiW}i{%`<9N zAkbfPChq(1JT++A5Cows^sMV)dPjj=;Xr+j@fj@U7@@v^5UL6Y14KBt|A)2*Xt5NP z9oA-S)*ws1T=Ah2Zeo<>dAH(LjGGc{=mvz_hFHbBpqF$tR7Sz&9zu*ostNE546k_T z*X~>J@d}<|tjakyBs{Shoz#;!KhxWHk4(#2NIq|=$B@8!X6V_fKk=q_kj2;r*s`3r zUCyD?CfJ~D%K49pC}$qC3R%np6nG1>jslzThQPWQq#YlfO+X|x=_XMU`Q0qcQ~SMC i!c;FE`~ZAs8;tet8;N{gU-0DB49;tOY`*3xO@e=>90u9| literal 0 HcmV?d00001 diff --git a/BaseML/__pycache__/Classification.cpython-37.pyc b/BaseML/__pycache__/Classification.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..53f3b224ee9c44d43d26365ee0b7f608410c7337 GIT binary patch literal 5247 zcmbVQU5q4E6|P%VU0wYSylyDhToLRz4#>03QhJ=N8{ zw{FkQj6I2A7BPf@jgb&BlAc5pF$PV1fRN?IH=lgJ55`1xVKousgAeeQ)Q=l<3?-*@i0eXLZ<8@T>*$GOJuj~K?E=w)8Dw@^wX}} zc$!hB?bMxiww`6w&WhZ2uAb9nJIc2U^@1*EqGG#LFX^%qmD^+WFB!eo~_U7cNQJ0AJXeNTtED%!Hc|f(cq;` zvwnoLGe)(14eK{*Ra2GyMx!VE#+sKjIwDXL?ZA({;WpQ0j# zAI6>x66qz~D3lo1I&NOs}r1cK;-<1=ahSsfUT^70@$^%2)g4Vgv{aj8Cbv3QaLHApE zuy2v=wrCaO@qN0ch?+n4X(dx~8k(uibj~SVTSDzW6Tqo5(L!@EA^0VoXaz8zRXIOe?1)eRK(Krb#tHKXh#h??S7(i|W$15wY{ zyyK_7dFJfNC(pcPh|kxdPF^Z1Z352Jta0 z|CGOQ*Gb-+r}F7j^CLz#e2HK%*IiTi{4frs=S^VXZ?e*$U`!VofIe4KXBAk{&|=GucrGPNA0%NZl>o$6M!z{IWpTUQ zV-sPqnpS?>+^}ScX9pEf%$-Ci(6gk(1^F&9As3Ae`nqguoadJ_&^)>Nn4Hj> z1H3S6Y_b!^v-fReNQ14xc){#vn&zyr;mAp84i5I6Z6>ESX{ETEeqBm+YPNl_SD2J)j-y1xI#>lI7s3!#15B-1QfSZ%`Ay262#>mf#b@H z-}`X;?GImh@q>5Y`}p!3-`V(#7^en@Ag-AtC=`H?w!a!C)me>WWyW3Qq$DPI2Vh>Z z)N3}Q0K`lgCUP{)XGswL#2qB=A~6S{tY#=xrYpi&s@Y(*8(|y5_P62-0KXAMYdpo7B;+^jE5DIe>arf`EX&wP_O2 zC4tRu<*B^-kSyS>sNsC?hAp!^16VrK#*Yo2{fRXw(QdxI+ppZW`WT%Ez>M>6KDGNz zdOmyu!bAE68pQdVfLNn6#Vf&aJ$G~%GVcUV8xII{R{UOx%x>vSL3@v8DsA z##*+E%qncav5~(JM2ROJr0zu$j_$u~TUgW~l743UE|mM;PI#$kt1Qm7Nh9 zw8hXxSlPkLGkB56iQ&oHk+GO$*A|5ege6$n?q~XD-`chj9`8mwLdw(98Dy!QZe_PD zgs==GaJ9dO_KZ~%_hAlY$yHf(m8}V5cDZsz;Byaqf^t^;s23#KKFY;r?2&O&XJn&} z }EQtv2@<*s_5Rj(Z@cWqQ+Pb;=|qy46+w;qi)?504%KzsRl43bnJ3>d8pqPZ{^ zZEEX>$Yh_~skSfe+cDq|Fp2~`H$l2S0K9C88Ob=_pJx*0l%RunOcLz~vP_p!`WXWU z1ciC~wl?r1y1m`XqDK?P++TaUu60{E)V|VZt^5Z1LW17=TWYhLwce+(va7HC`s&u( zR|l7`Tz>U~cek!wdimqaFJFCqaP>E@U3qEn(fjXL3xXh^a%U09PSVLioTPV~!dU8p zj4y=0CcaJTY|PWQXLY9&@Y5p#Ih645KE$@599aY;7DzNmP3oP0D|bCkV7j^6i+icHg{BE5 z6$YH^?l6(qNUo+QC6{~Hi6Fb5o!85arJ%9g?H~u3>n=w-dm` zLKH3_oWr&{EvcHjf$B!o+ljvt{1p8X9gFdS>n?o~srN0NrqfHOASI0f8)CuK{${nR zC3-ZyP4@h6(+WC4zlA%|8N+Z+>bWnX(USC>0);f9A*ZB2N+|2JDC-16hEYz$h&`re z)ct)h2*zZ{cac&I+uOtTl-=5`47X+t5lcsB<=8k{sOJnBJRLh-{Z*No-jc8V6IYsY zGVuj0rJ55RJkmVy7)mM&4^ZBgW`!rHQg7UaMkmGrCWvwG-E9AdfTY3wON_L$Eu`>E zBTsso8Es7PJ>|ZFe3NFnRD$0r&DB(^GC@YHmgy8lM@$?d^PUG}_0j{S=i$GaD6J8n zqi!`4^cCV8B$Nn9X7zD${T50!Ssz4Tg!7{{GVK!83o`D*#ra-lLlF`du2 zmaebfB4TQ*Dc+`%p7v8Hsj*}^3VadIwF4=_Mj{9?g3zcAjH+Tfse21_RM)3g{I@gg z6vRo;UWkJ92wNPfCH`8{M_V;MQth1n^+C8kwX4V9S`q#nkQX{)S)YE@^r%u3)5A$P zXwV^5pAJ-ERGX}{^+~$E^9{p{EIml;Oszy;L&OnZBth2NV?k|8GNW=INL}?Hc{HK$ SLE$OQuZjp(yFc2cT=QR_DjVGZ literal 0 HcmV?d00001 diff --git a/BaseML/__pycache__/GaussianNB.cpython-37.pyc b/BaseML/__pycache__/GaussianNB.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5e8c4d1921eb8d93cd3366219f9067907b73d239 GIT binary patch literal 2258 zcmZuz&2Jk;6rb5IuN~(*ZK?PQm8h@;HWK1ML8T2UNGKSj-h5eYcE-s%>$RC#r^K~S zN$IKFsW>D@E}RiU-1!&g3aHA7doS>NvvKNH9c$lwy!U3_{NBfSYjLs0(2j@grPRL2#&8q!cXMwXXnDB&u z%!GgBbZUa%WsTqrd$M-JF-vihj8vQ)MmiZNY1aBO&LjQpC{|KLQmKJza8vst9%-G% zd3!4%%~`v!aSJQb+ShRe7tS$*jcdXe!7+!G>mn3YjC`>n7DOGRKrD(SNL9qLSV13( zRoHb&dDtl7=lfIdNCsC1 zU9hw+7>;q;Px)qJ(KrKbykT7InTkkN9`~gQc4d*=6UHS{iFdSRhf&l`GZ{suZu^qrFy(9lx9&UYox<&T6V~&ELm~Fa z?FCcU%2g(=m7~yP4~XkMaJtS_Hkqw>G;`S0oBBm4eC$$vg%!1ld&D=`5uXMVg!3eT z7Kau>n#NY6G7Tr*B%pmuUOB$XMDUYCzQtbklf_A85}rD+6*G9b(pFb+i>Lfu#JQ{G z&;)xj7E+!4hjvB)fZ>tTjGx6jGHWauCx@7db1~?XtE4c_P?%6bF#=d>1zILJh_jK@ zrlR*o-EJn0o92aDC6=4XT&-cGmhH5g7LBS}r-ip@p-RU^#oS$ zXF7361C1Pi;ru;J03tg<;`HG7t4Ow~GeKS>1a20tU3K9k=g5KkJ>i}BaI?Pwxg!Ki zejTy_WJM7?C+k7B0$Hz=v&k5?O8{Cp)S@sV`2KnL{gcyQp8W9e?_YoW_xH#5r*EGL zEE`wJ-Ep`*(E7&a{b{38!dw}mTBS)*B2RZR{!qawCg=`SKQ0sndBeAkFdn5V5+6Fo zMg22ghW%cIwVLK#sbrqW>(JFpAdIg8+7*CHbi6SK>4or<$3Ig0^V5sGqNB+qTg51T zCRC3A9w-VrB9)^O+sLvp)Nspq!Gpl;!i$#GvjL*cqH?dAmjsiB@z! qn-HD#87q&|0~zhahf>>}6+!tji%j@QdAXYe#mp?^L+GsVy8AzM%pJ!7 literal 0 HcmV?d00001 diff --git a/BaseML/__pycache__/KNNClassifier.cpython-37.pyc b/BaseML/__pycache__/KNNClassifier.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..977597a952ac6a165ad01500c3e8cc068ab27569 GIT binary patch literal 1552 zcmZux&2Jnv6t_K}yP4254K0-bA)y}TKo)V}fGP^9Di93=g4+nmnvA{4gxQ(J_R?nA zoEo)U%7qgJq3n?h5;sKo2ly9!g%ah&ofGeQvfB^gk)PkZXZy|X{ob3c)zv_S`vnAc(IPe2&5Pmh@)$KIUG>5OoH zVF7z!!Z~%;NT4qk>@y$M9?U+>6_|-xol)W4NB?tzKwLkwAQXk$pAmp}rQyvY5$QS0 zT5bJtVfJh!D%BJtX~SJ<%3H#ED57FVJ9o_au&O2JHgW4>cO(i^XlZP8o4Zun5ERI! zjSdzDP{5!NyA4LIkafzeuVp<{5!ikr>JlvfzCYM&M{@A-2ixy%4eF|Bb`PpsvKid? z5=05d1|N-Ovjx$%i=EeQh{*u;54Q)9<;R?Ejt?w+Y}HhTbG%-=>hjmwMHirkM)t`uBz2#`^yZ9q7D)eo05hDkLu!DQ;~3JS}^3A=!e*NvA-yeK+c;!@pIqj+EVX@w@GU_~N>H@w7x@?tHcu;LP!&p^~ zvEi^)qr#+2T|}!_l%-2oCth$nUE=Yi4nYvQ4$riQIGtx%eOS%Q>U$kt00@GF8arf$ z%@{&33_y9{@ddj~W-y$@kvJUn^$?cYEC;Go&W6bcH5V+rXr=paU8B}G*l z^%9&>FQZrkk$N2#A8W^kO6o~%o(0vbnxRy(DJ2%i8L))Lbh?Vbmfj^eWDw!I)_N0^ z8MXv5$RYeV01B=EN4U1V@4Hq4b~%9M*j9mSpDdH zno66fq7m(gYf~7Rh7O#Mf}ge0i{R7nBLpHtHeExs zPr9>|DkL$Du+A~x(3E}7p|K`igL3}Gq^LWOx(r*@D=4m@NKrhF?ldeSg#j^rItCH5 zem@T4z**BUKd(QpWucnQ<-fyqbAD-IcU{e)rDbWVw&{|9H@O@BFQARDc3=E9wxHuT Ip}?>AACXCRZ~y=R literal 0 HcmV?d00001 diff --git a/BaseML/__pycache__/PCA.cpython-37.pyc b/BaseML/__pycache__/PCA.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6ede3ed6496c7f6403edd537b41e7ca5bee1e310 GIT binary patch literal 1170 zcmZuw%}yIJ5VpO$$tEO}QbASq=U8r7E3kdm*o7I9n`3Qgg7KkL0=A@tl zMp0&YFbF;o8OU%(WO%~{RI+a*iT;2uNvI1>j}H1NZdPlZZVxnyKmZvqxgnVhW^@3F zWHcj#P&Q-}cqC)l0^X2qNZTtw^RvUXu5?1gK}%xF<4*Em-; zy^=0K(iCU4H^-b0vs`iRI-ak*n^IU&E9<&dD!5T{oZ76^E-Ff?@`SmtR{79`fd7t| zr@;R1_b$pp^-e#Z931xYOz89L>`Lk0@gt3jzRW35EB)=2}u&0U}0XOCeHCy25uec!FKF%6&$9vaU z141|Hq=hKG{z0?X5Z{5{5+bw|05T6SK!8j6e_&gXQrE-M6lMo9xDCyRO4zYcHFs^z zYf)4=$O-dEU5KrFjJK8Pp)v~YwF^0FEHR-S_$FOMy|z9;j-%>}i;r!JBeyOj_2pY0 z>E*{KcJfk4z8s^Mkf8Q2fKImX!23oRV1q?Unm7YEtT2vk&SBKXi_zr#$5`YGi+KjF z<~fpANM0ksM%*LVBLDR8q4`mYS-Txaapbj0IM}Jb=Smp8CzXFVb%x{Zt!5LWG4ftU Ue}M0N{9%D>AIHx(zeD5TAM|Yo>i_@% literal 0 HcmV?d00001 diff --git a/BaseML/__pycache__/Perceptron.cpython-37.pyc b/BaseML/__pycache__/Perceptron.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2e17068df34adbeaca51f8485ea2123bcbed35cb GIT binary patch literal 1211 zcmZuwOK;RL5VrH!r0Fh{wv>kiM?@rO{s2Oys34)TRN@vPS#IoYvt*NCd;3zwrTrn@ zBY(+PPW%N<%y@UpwyGtM$M$$0-+bQg^%4T(vh5c?eL{ZYWr0aRQ-66NLeYVJC?XNV+7V0OJ5l(ypdfJI8p3=JQ-1(q$dF!nhFtj*GNI>$1@jX) z4^3x6-DxE7E*9Q557s4^iCMlNuyzH3Fn-^X)Klo*iL__EM%$p}=Fmo>R5c$-+c}V? zI2P7N5%GQPu4BdqWhEK2UANAyBf$;V(%9&P8O6)mc0iHZSihCZhNDKv3Q!BQtOmb` zT7}?$ce2A~B(uFwyYIHMs^s;-X?ZN`Z086>0WY#It*p1f?=Ihey(7jM>YsPB|Ilx? zrxtQ5>(VgRL7-f_{Z(&+c4(KLtu5Hj?QS59Byb2n2j!d$$rYeC^d^)Np`PNY6HC3<(ds7 zH)AC=vq{Y~AGHRI4ICQ6Jkgx0SmE@}4tbhhwVJum>OLZR~ WW1H{tYU4N4wBF*EbZqF-*#8I7F&N?i literal 0 HcmV?d00001 diff --git a/BaseML/__pycache__/Regression.cpython-37.pyc b/BaseML/__pycache__/Regression.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c6fab292e4b8052e5d48ff3f8f56d965c42e85a0 GIT binary patch literal 2680 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 literal 0 HcmV?d00001 diff --git a/BaseML/__pycache__/__init__.cpython-37.pyc b/BaseML/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..162d4372cc930e4530738c419c0c01c12f568bfd GIT binary patch literal 545 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 Date: Wed, 26 Oct 2022 11:57:25 +0800 Subject: [PATCH 2/3] 10.26 --- BaseML/Classification.py | 22 +++++++++------- .../__pycache__/Classification.cpython-37.pyc | Bin 5247 -> 5247 bytes BaseML/__pycache__/Regression.cpython-37.pyc | Bin 2680 -> 4126 bytes Downloads/lenses.csv | 24 ++++++++++++++++++ checkpoint.pkl | Bin 10267 -> 827 bytes demo/.vscode/launch.json | 16 ++++++++++++ demo/cart_demo.py | 13 ++++++++++ demo/iris_cls_demo.py | 4 ++- demo/lenses.csv | 24 ++++++++++++++++++ demo/mymodel.pkl | Bin 0 -> 1061 bytes mymodel.pkl | Bin 0 -> 1084 bytes test/test_datasets.py | 17 ------------- 12 files changed, 93 insertions(+), 27 deletions(-) create mode 100644 Downloads/lenses.csv create mode 100644 demo/.vscode/launch.json create mode 100644 demo/cart_demo.py create mode 100644 demo/lenses.csv create mode 100644 demo/mymodel.pkl create mode 100644 mymodel.pkl delete mode 100644 test/test_datasets.py diff --git a/BaseML/Classification.py b/BaseML/Classification.py index ac89b44..75fa2b5 100644 --- a/BaseML/Classification.py +++ b/BaseML/Classification.py @@ -49,8 +49,8 @@ def train(self, seed=0, data_type='csv'): self.model.fit(self.x_train, self.y_train) elif self.algorithm == 'CART': - self.model.fit(self.dataset) - print(self.model.explained_variance_ratio_) + self.model.fit(self.x_train, self.y_train) + # print(self.model.explained_variance_ratio_) # 返回所保留的n个成分各自的方差百分比,这里可以理解为单个变量方差贡献率。 elif self.algorithm == 'KNN': @@ -89,17 +89,21 @@ def inference(self, data = np.nan): print(f" CLUSTER-{i+1} ".center(60, '=')) print(self.dataset[labels == i]) - if data is not np.nan: - pred = self.model.predict(data) - return pred + pred = self.model.predict(self.x_test) + return pred + # 从文件加载数据集,支持csv文件和txt文件 def load_dataset_from_file(self, path, x_column = [], y_column = []): if type == 'csv': self.dataset = pd.read_csv(path).values # .values就转成numpy格式了 + X = self.dataset[:,x_column] + y = self.dataset[:,y_column] self.get_data(X,y,x_column,y_column) elif type == 'txt': self.dataset = np.loadtxt(path) + X = self.dataset[:,x_column] + y = self.dataset[:,y_column] X = X.values y = y.values self.get_data(X,y,x_column,y_column) @@ -127,7 +131,7 @@ def load_dataset(self, X, y = None, type = None, x_column = [], y_column = []): raise ValueError("请传入数据列号") if type == 'csv': self.dataset = pd.read_csv(X).values # .values就转成numpy格式了 - self.get_data(X,y,x_column,y_column) + self.get_data(self.dataset,self.dataset,x_column,y_column) elif type == 'numpy': # 统一转成numpy格式 self.get_data(X,y,x_column,y_column) elif type == 'pandas': @@ -140,14 +144,14 @@ def load_dataset(self, X, y = None, type = None, x_column = [], y_column = []): self.get_data(X,y,x_column,y_column) elif type == 'txt': self.dataset = np.loadtxt(X) - X = X.values - y = y.values - self.get_data(X,y,x_column,y_column) + self.dataset = self.dataset.values + self.get_data(self.dataset,self.dataset,x_column,y_column) def save(self,path="checkpoint.pkl"): print("Saving model checkpoints...") joblib.dump(self.model, path, compress=3) + print("Saved successfully!") def load(self, path): diff --git a/BaseML/__pycache__/Classification.cpython-37.pyc b/BaseML/__pycache__/Classification.cpython-37.pyc index 53f3b224ee9c44d43d26365ee0b7f608410c7337..d2e2e40d7db65f7289eea29c6faba8aa21c884ab 100644 GIT binary patch delta 1204 zcmah|J!}+L5Z>AUTi-qJt&f9KY%mU3J`*6Jf#66Gn*_vP z(OOA_k|qt(2vJ0YJ&`s@Mna;XNSi8EnyVrNJs>J11T!y&f)v@O_q{hWyEET>@9nFR zS0iG)Q1CQ*R)3zZMenVORSR19hc#CfsaDq_YeAPO?Rv62p+nQ{=%6*9sHjcRhxnyE z)>j}qN7L)*D@GzBC+o#qc4eS(PFpd_@6`RsTd=NyJpApUq^LXr{%vpC+L!2ADYZM0 zth=gHJV?!~oLU_K?HViw(^>-c^;mHbHsJ5hWWHUyB;&5tk{6l@4!Ji$b&Gp zKw0;oWa3}$7~I94+#a}tX>RvnBQ+y)z4i-rbkoQRksUc5{VLT+xF?ZPd_k{h>{*=81}u?TyD!9wJ1f%+yNt z)aaOW3@0d;PPwwg&K%D5Kbdm$;lHWyO3%IikZEsFv|XYcsNoW2+Tle0Me#Jny15g} zt@tx3FG+a-Cky4hv+Q-6Q7C1&EYGNS4unbgxePDH@+{d^OMXa;tT99kTuOe8zZOR6 ze*IZE4v(;3Y&^K1PTx=>kN~sXpiM%s@~TnQWR@BcosOJQQK05Y0u}j*B78%?#}zS< zn%wr<-+mP6J*iIe5lq)~b6|EYve#YA|H3C<8yy{^%Sn_cf@*jQTYn|qXB zF>rVC69!g6?qN93Fh@|e-))-(eAD~&-oYI|klh|8&`4#MhJZ3*K+~qdt4D*^Jb3uH z_hT5wP5ywOgEskgs(WbRxWBVU$hdtzY{l{ec1_^R;?T&u2gs3+-oh^4 zu?`s?435AeVz6_^F?K3lzTn*{hL~Z2p~Y~SfqBSTd=iWf4vBT5*DnTT&vp$dC{P`c S7dftkZ{Xg(XT*Mc>G*4Zat%TN delta 1186 zcmZ`&O>7%g5Pq}&yYa5qZkmuPe*y}23N-DdEvYJKQ)q<LaI6k4v1#`xNxY_nQh9U2(SEkzBe;F^UWLY z)OKpo$uJBAef~OdZsnKpThT2WdibN=JT#(3Tcq}?A-BmI%1eZHA3&&(c{{pHcIQqJ zqmz0~g;JObrX zZlq03v15WyHm{u*8kA_msxNQvz8N0YOvRF@2McuzbH4*8upCUoDVz;nJ-kE$x-+{n zoI-&008JLdwg)i@jA0yDUoo@Q>X zwYo|kWz$ZiOfJbL+ioX)z}{u%&nGH*NhTLF*&trGj#^>7h> z$A7}fQ^#pj%t8sNXwaqQjt0^}Y6>OSXbbsr&i%);O&;EIjmy!5zf6p``37!B`}fWg zbBPUD_aZ+LEU*&4o~W#re1k^ z_%q_&8iAmD^XQ@3;?44y>41Yjm5;&X)p)`wcEZ8~@jOKcle6rDHo#`AHUrp|{X3({76VxXl$Ai7||Ck>@Q1foQdi?F7ClVI1LL~q7Y z944|vQVF4kB1Tokrg9c+SkOWj?IINm7G1NQ1*@KdJ~X z^5k>0wHnKwAfKFkk~l+(vs$SxH(JdgwcC3uwve*6oFa~bLqr@SZ}qkiZ(Wqjon~dR z*6>fj7}BdWX0t(71P-tqeruD`Upn@vSLQTVHOT`H%@jWsyKk|Gw3ux$puWM*8*)5i z0{bsmgh)olhAvM<9C2jZ9k$NYQr~9lIzp9;8HG0HD!8-Cf!8g#Ebg;TE2~|1VEsB~ zb$1=UzFr#)d#kh6`{v@GI~RAaba!uD?tRt0cl&lJ zFK0naoiotnq?F4tb!%ZQ2qQ13`YCVJ!YC8N^rZCK@@-;Ufyj0wV(QF5v03RgeI;ed z%+z`pHu)aGI|Qe-{F$wBvR2F2Tx-|5X4o#B7~vwf8tQKR7nqd9?I+AaR62L z2J}GAjzAZEqXS`LLl`)CEz-M&N_HfAg;F=u1F5X^xC$NzZ+@R;6BZMe7&>sJ1Ajn= zJ^xR^%7OJmWOZ%22kKiLEFYGCkA56<3-lCpr(avhn*Y8)32o0whX2_b1>C!K^X^W! zcj5a?_THCQdY5iyrDq1M=1M!wtt@$vE|edDE>8kVu6zko>dt$OR+a#dt4t-k$^-c! zxt=1|epUXfGi6d=?8LK&lkcp;3ukZ^P6IRuY2U9nsydRDW)fRfVRGFX?>ty%)UQ-# zNG!5Clan!er_e5-a2E9m4bt^%PX;ImU1@zHhO`3fZ5_hseLnB=A$OhEO<_!EGKg|@ z3ww03I_!dV1m8kURcsYrb51^stK~BU6zCF5xwl#iOHLLyYqb(duNI^{5VdA%Nk9C| zTk%t?-9I>kmKc*G6@^W&= UnPTPS59cUw)IE&PeARv9A8fq2^8f$< delta 391 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 f{E|Xt!S<_dhBd(D3Us-k|OP^B1V literal 0 HcmV?d00001 diff --git a/mymodel.pkl b/mymodel.pkl new file mode 100644 index 0000000000000000000000000000000000000000..67a33946ae3481d908d842bcfe27452d3dc45d7c GIT binary patch literal 1084 zcmV-C1jGAyUY%A?lM_W0Pd2-37zhRhcX1bF71y8`0}2EMGD{GU(OHcMtsc5&CY|lk z$;`Z&9xzp=N)MY|FMJOD7T!2}=b(ijfFmcRyJtG73~af@JEYU^|9ijpy5{GS6aU~5 zEAs0sBBYKT&x&IbYgdWm#%|!>;@r02xjmOe8Wc|c0>vTB)X?5Sq2NR=BN11F5}M`r z4cB*J7M1zmIP_e`g)k>2Hi;SRkw$&%N8BYLqcCrxgM#7uIJWwsM`A3^plr;bYEHtl z?7?26h!!)!J>qUqhI^6aFrEUI3fgrpm4xq*G11{HirWtpUgdzN>_o(h2^^RXAv=cCWZ)$;?TZs)%L}Om)rqo*?PHY< z=0(FnV-9JO9V9GFSd8IiUZLn;1_XvzobLnMbM3mH^uqxTU55jvnc}h*Mb_X>WQC!C z<`9SG@DN_DrTtHA=>irUX{h;KOQ>tGh~|WxS|NcWMrjjXlZ+thaBe)?-_GcG`v29 z_iJ>4F47}LaT6MJi7wNlbcLSSrm~8PXvCOQ3Py1YPIutU5I(5Ud1E%60zQw}2@;>d zhek!_k&ftD8S2~+&Z|(BO=xDJjv?Xn_StiALE!OG2R>GK`~(-xnsn`v9>WfGy)Ilr z`#2+#yOVM*qj}EB1`}Fxf*Iu-Ljx|=8zFZ!)wQvP3aAvv#q>FRXHiN4} z_@qWJ(ednD6S-dRzzv=&eRgU-wT;3EZqm#2hEX1YL0kM!bp)SLJ@e6P!so(=*@5-v z`}o2(7DwPGbbO5~FDpjVgn$?H%yS&!2e8CiJ95f9p0L z{{DAMls}>K`V{E=@^8k-bpBAf0*VQ(>S{hj%LS=>dVA8kaQ{*B{-b|d;>DU!O;>q| znR%8PdbIoimLL4t+A}3w+;yJQbys!eM+}Z2wVx`_^!%$e%`faap6Yw*=W%Pd{mk2m zQ5Gb2;CXqqb}w4rZte0oAOYZA%S-s{a$CMGcZPt* zuM6Lb(iVJ^y)f(J<*4T4rIl6n^gNWEr?OMktF*RjpKn1=Z25hIvyU%)mqg-g3%-@F{^@$7eg?iv?D|tJ;;Xc1 CF(~u^ literal 0 HcmV?d00001 diff --git a/test/test_datasets.py b/test/test_datasets.py deleted file mode 100644 index c2d38ae..0000000 --- a/test/test_datasets.py +++ /dev/null @@ -1,17 +0,0 @@ -from BaseML import Classification -import numpy as np - -DATA_PATH = 'Downloads/China_cities.csv' # 数据集路径 - -if __name__ == '__main__': - - model = Classification.cls(algorithm = 'Kmeans', N_CLUSTERS=5) - # 指定数据集的路径 - model.load_dataset_from_file(path="Downloads/China_cities.csv",x_column=[0,1], y_column=[0]) - - # 开始训练 - model.train() - # kmeans输出聚类结果,不需要输入数据 - model.inference() - # 模型保留 - model.save() \ No newline at end of file From 1d41f324900c55586171c9c3e14950386599125e Mon Sep 17 00:00:00 2001 From: Even-ok <1284915396@qq.com> Date: Wed, 26 Oct 2022 14:02:55 +0800 Subject: [PATCH 3/3] 1026 --- demo/iris_cls_demo.py | 3 +-- demo/lenses.csv | 24 ------------------------ 2 files changed, 1 insertion(+), 26 deletions(-) delete mode 100644 demo/lenses.csv diff --git a/demo/iris_cls_demo.py b/demo/iris_cls_demo.py index 17f3943..354ec42 100644 --- a/demo/iris_cls_demo.py +++ b/demo/iris_cls_demo.py @@ -1,5 +1,4 @@ -import sys -sys.path.append("/home/PJLAB/liangyiwen/Even/code/OpenBaseLab-Edu") + from BaseML import Classification import numpy as np from sklearn import datasets diff --git a/demo/lenses.csv b/demo/lenses.csv deleted file mode 100644 index c8b324d..0000000 --- a/demo/lenses.csv +++ /dev/null @@ -1,24 +0,0 @@ -1,1,1,1,1,3 -2,1,1,1,2,2 -3,1,1,2,1,3 -4,1,1,2,2,1 -5,1,2,1,1,3 -6,1,2,1,2,2 -7,1,2,2,1,3 -8,1,2,2,2,1 -9,2,1,1,1,3 -10,2,1,1,2,2 -11,2,1,2,1,3 -12,2,1,2,2,1 -13,2,2,1,1,3 -14,2,2,1,2,2 -15,2,2,2,1,3 -16,2,2,2,2,3 -17,3,1,1,1,3 -18,3,1,1,2,3 -19,3,1,2,1,3 -20,3,1,2,2,1 -21,3,2,1,1,3 -22,3,2,1,2,2 -23,3,2,2,1,3 -24,3,2,2,2,3