1. Trang chủ
  2. » Thể loại khác

Trí tuệ tính toán và ứng dụng

35 2 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Trí tuệ tính toán và ứng dụng
Người hướng dẫn PGS.TS. Trần Văn Lăng
Định dạng
Số trang 35
Dung lượng 708,93 KB

Nội dung

Trí tuệ tính tốn ứng dụng PGS.TS Trần Văn Lăng Thuật tốn K-láng giềng gần nhất • • • • Tê n tie) ng Anh là KNN (K-Nearest Neighbor), Là thuậ t toá n thuộ c loạ i supervised-learning đơn giả n nha) t KNN có theE á p dụ ng được cho cả ClassiHication và Regression Khi training, KNN khô ng họ c mộ t đieL u gı̀ từ dữ liệ u, mọ i tı́nh toá n được thực hiệ n khi dự đoá n ke) t quả củ a dữ liệ u mới • Với việc phân lớp, nhã n (đaL u ra) củ a mộ t đieE m dữ liệ u (Data Point) mới được suy ra từ K đieE m dữ liệ u gaL n nha) t trong tậ p hua) n luyệ n • Với hồi quy, đaL u ra củ a mộ t đieE m dữ liệ u baV ng chı́nh đaL u ra củ a đieE m dữ liệ u đã bie) t gaL n nha) t (trong trường hợp K=1) • Tóm tại, KNN là thuậ t toá n đi tı̀m đaL u ra củ a mộ t đieE m dữ liệ u mới baV ng cá ch chı̉ dựa trê n thô ng tin củ a K đieE m dữ liệ u trong tậ p hua) n luyệ n gaL n nó nha) t (K-lâ n cậ n), mà khô ng quan tâ m đe) n việ c có mộ t và i đieE m dữ liệ u trong những đieE m gaL n nha) t nà y là nhieY u (dữ liệ u mà có lời giả i sai) Minh hoạ • Giả sử có mộ t dataset goL m 2 loạ i dữ liệ u là màu đỏ (class 1) và màu xanh (class 0) như hı̀nh bê n cạ nh • Thuậ t toá n K-NN hã y tı̀m đieE m (50,25) – có hình dấu O màu đen – đeE bie) t đieE m nà y thuộ c class 1 hay class 2 • Cá ch là m: • Tı́nh khoả ng cá ch từ điểm O đe) n ta) t cả cá c đieE m có trong Data Set • Có 2 đieE m thuộ c class 1, và 1 đieE m thuộ c class 0 • Vậ y điểm O nà y thuộ c class 1 • Sau đó chı̉ ra K đieE m gaL n (ở đâ y la) y K = 3) với đieE m dấu O nà y nha) t File: Draw-graph.ipynb • Tạ o dữ liệ u x = np.arange( 0,N*5,5 ) y1, y2 = [], [] • Chương trı̀nh giả i quye) t va) n đeL nà y như sau: • Tạ o dữ liệ u for i in range(0,N): y1.append( X[i][1] ) y2.append( X[i+N][1] ) import random • Vẽ hı̀nh N, M = 21, X1, X2, Y1, Y2 = [], [], [], [] plt.figure( figsize=(10,6) ) for i in range(0, N): plt.scatter( x,y1,c='r',marker='x',label='cl ass 1' ) X1.append([]), X2.append([]) X1[i].append(i*5) X1[i].append( int(random.random()*50) ) plt.scatter( x,y2,c='b',marker='+',label='cl ass 0' ) X2[i].append(i*5) plt.plot( 50, 25, 'o', color="black" ) X2[i].append( int(random.random()*50) ) plt.legend() Y1.append( ) plt.show() Y2.append( ) y = Y1 + Y2 X = X1 + X2 • Hua) n luyệ n và dự bá o from sklearn import neighbors model = neighbors.KNeighborsClassifier( n_neighbors=3 ) model.fit( X,y ) print( "Thuộc lớp: ", model.predict( [[50,25]]) ) print( "với xác suất ", model.predict_proba( [[50,25]]) ) File: Draw-graph.py Định nghĩa về khoảng cách • Trong mộ t so) trường hợp riê ng, có • Khoả ng cá ch Euclide (hay là chuaE n L2) • Cho 2 vector X, Y có cá c thà nh phaL n là X = (x1, x2, , xn)T, Y = (y1, y2, , yn)T • Khoả ng cá ch bậ c p củ a 2 vector nà y là con so) được ký hiệ u là , người ta cò n gọ i là khoả ng cá ch Miskowsky ∥X − Y∥p = N (∑ i=1 1/p | xi − yi |p ) N ∑ ∥X − Y∥2 = i=1 | xi − yi |2 • Khoả ng cá ch tuyệ t đo) i (p = 1) hay cò n gọ i là khoả ng cá ch Hamming, hay Manhattan • Trong mộ t so) trường hợp riê ng ∥X − Y∥ = N ∑ i=1 | xi − yi | • La) y dữ liệ u bệ nh tieE u đường củ a người Aj n Ví dụ KNN Độ (https://www.kaggle.com/uciml/ pima-indians-diabetes-database) • Dữ liệ u bao goL m: • Pregnancies: So) laL n mang thai • Glucose: Lượng Glucose • BloodPressure: An p huye) t tâ m trương • SkinThickness: VeL da • Insulin: NoL ng độ insulin • BMI: Body mass index (tỷ lệ giữa trọ ng • Khoả ng cá ch Chebyshev ∥X − Y∥ = lim ∥X − Y∥p p→∞ = N (∑ i=1 | xi − yi |p ) 1/p lượng và chieL u cao) = max | xi − yi | • DiabetesPedigreeFunction: loạ i tieE u 1≤i≤n đường • Age: TuoE i • Outcome: Ke) t quả 1 hoặ c 0 Python với sci-kit learn • Tạ o mô hı̀nh và thử nghiệ m NUM_K = model = neighbors.KNeighborsClassifier( n_neighbors=NUM_K,p=2 ) • Mô tả và chuaE n bị dữ liệ u import pandas as pd model.fit( X_train,y_train ) y_pred = model.predict( X_test ) import numpy as np from sklearn import model_selection,metrics,neighbors import matplotlib.pyplot as plt data = pd.read_csv( ' /dataset/diabetes.csv' ) N = len( data.columns ) - X = data.iloc[:,:-1].values y = data.iloc[:,N].values X_train, X_test, y_train, y_test = model_selection.train_test_split( X,y,test_size=0.3,random_state=42 ) plt.figure( figsize=(8,6) ) plt.title( "Đồ thị số lượng khác kết đự đoán dataset" ) plt.plot( range(1,NUM_K),error,color='red',linestyle='dashed',marker='o',markerfacecolor='blue', markersize=5 ) plt.xlabel( "Số láng giềng K" ) plt.ylabel( "Số lượng khác tổng số liệu cần test" ) plt.show() • Thử với nhieL u K khá c nhau đeE bieE u dieY n thà nh đoL thị, qua đó bie) t được với K baV ng ma) y thı̀ có tỷ lệ so) trường hợp dự đoá n sai NUM_K, error = 50, [] for i in range(1,NUM_K): model = neighbors.KNeighborsClassifier( n_neighbors=i ) model.fit( X_train,y_train ) y_pred = model.predict( X_test ) File: KNN-sklearn.py error.append( np.mean(y_pred != y_test) ) 10 • Dữ liệ u nà y được tạ o ngaY u nhiê n baV ng phâ n pho) i Gauss xung quanh 3 đieE m chı́nh (ta tạ o ra đeE định hướng) với ma trậ n hiệ p phương sai chı̉ định centroids = [[5,15],[12,5],[20,20]] DATASIZE = 600 K = def myrand(centroid): return np.random.multivariate_normal( mean=centroid,cov=[[10,0],[0,10]],size=DATASIZE ) X0 = myrand( centroids[0] ) X1 = myrand( centroids[1] ) X2 = myrand( centroids[2] ) X = np.concatenate((X0, X1, X2), axis = 0) 21 • ĐeE hua) n luyệ n baV ng K-means model = cluster.KMeans( n_clusters=3 ) model.fit(X) y_pred = model.predict(X) • Sau khi có ke) t quả dự bá o, ta thử coi lạ i cá c đieE m trung tâ m print( "Các điểm trọng tâm là\n", model.cluster_centers_ ) print( "Kết phân nhóm\n", y_pred ) for i in range(len(y_pred)): print( y_pred[i], end=' ' ) • Coi qua hı̀nh minh hoạ 22 Dùng TensorFlow • Xâ y dựng hà m hua) n luyệ n • La) y dữ liệ u như trong vı́ dụ dù ng phương thức củ a sklearn, ở đâ y cũ ng gio) ng như khi dù ng TensorFlow cho KNN, ta khai bá o thê m cá c bie) n Tensor như sau: X = tf.Variable( X_train ) • La) y K thà nh phaL n trong tậ p hua) n luyệ n X đeE là m K trọ ng tâ m def pred(tt): cents_expanded = tf.expand_dims( tt,1 ) L = tf.sqrt(tf.reduce_sum(tf.square(tf.subtract( X,cents_expanded)),axis=2)) y = tf.argmin( L,0 ) means = [] for c in range(K): means.append( tf.reduce_mean(tf.gather(X,tf.reshape(tf.where(tf equal(y,c)),[1,-1])),[1]) ) new_cents = tf.concat( means,0 ) return new_cents, y cents = tf.Variable( X[0:K] ) 23 • Lặ p lạ i 1000 laL n for _ in range(1000): cents, y_pred = pred( cents ) • Vẽ lạ i hı̀nh đeE trực quan hoá plt.figure( figsize=(10,6) ) plt.title( "Có nhóm cụ thể sau 1000 lần lặp" ) plt.xlabel('Trục x') plt.ylabel('Trục y') plt.scatter( X_train[:,0],X_train[:,1],c=y_pred,s=20 ) plt.plot( cents[:,0],cents[:,1],'k*',color='blue',markersize=15) plt.show() File: Kmeans-tensorHlow.py 24 Ví dụ thực tế về K-means • Trê n internet có ra) t nhieL u dataset đeE cho phé p chú ng ta thực nghiệ m cá c phương phá p, cũ ng như đeE daL n quen với việ c giả i quye) t những va) n đeL thực te) baV ng cá c tı́nh toá n thô ng minh • Cha{ ng hạ n, https:// www.kaggle.com/datasets 25 • Hay tạ i kho veL Machine Learning củ a Center for Machine Learning and Intelligent Systems (http:// archive.ics.uci.edu/ml/datasets.php) thuộ c University of California-Irvine • Tạ i đâ y lưu trữ dataset củ a ra) t nhieL u lı̃nh vực từ nă m 1987 đe) n nay NhaV m đeE phâ n tı́ch thực nghiệ m cá c thuậ t toá n họ c má y 26 • Giả sử ta dù ng dữ liệ u veL bệ nh ung thư vú (http:// archive.ics.uci.edu/ml/datasets/ Breast+Cancer+Coimbra) • Dataset tạ i http:// archive.ics.uci.edu/ml/machinelearning-databases/00451/ dataR2.csv • Có 9 thuộ c tı́nh và được gá n nhã n là 1 khoẻ mạ nh (healthy controls) và 2 là bị bệ nh (patients) 27 • Chú ng ta có theE đọ c trực tie) p Hile nà y từ internet cũ ng với những import như vı́ dụ trước dataset = pd.read_csv( "http://archive.ics.uci.edu/ml/ machine-learning-databases/00451/dataR2.csv" ) • Có theE dữ liệ u khô ng đaL y đủ , baV ng cá ch kieE m tra, roL i sau đó có theE xử lý baV ng cá ch thay giá trị trung bı̀nh tương ứng, dataset.isnull().any() data = dataset.fillna( dataset.mean() ) dataset.isnull().any() 28 • Do cộ t cuo) i cù ng là nhã n được gá n (đã phâ n lớp, nê n ta dù ng cộ t nà y như là dữ liệ u đeE so sá nh ke) t quả ), từ đâ y tạ o ra X_train và y_train như cá ch là m trong cá c vị dụ trước N = len(data.columns)-1 X_train = data.iloc[:,0:-1].values y_train = data.iloc[:,N].values • Chọ n so) cụ m là 2, và lặ p lạ i 100 laL n to) i đa model = cluster.KMeans( n_clusters=2, max_iter=100 ).fit(X_train) y_pred = model.predict( X_train ) print( "Number of iterations run: ", model.n_iter_ ) print( "Sum of squared distances of samples to their closest cluster center: ", model.inertia_ ) print( "Coordinates of",NUM_CLUSTERS,"cluster centers\n", model.cluster_centers_ ) y_pred += # Do nhãn lưu giá trị print( "Accuracy: ", metrics.accuracy_score(y_train,y_pred) ) 29 • Ke) t quả sau khi hua) n luyệ n baV ng K-means File: Kmeans-sklearn2.py 30 Tóm lại • Với ý tưởng củ a thuậ t toá n là bộ dữ liệ u khả o sá t (mà ta hay gọ i là dataset) được phâ n thà nh K nhó m • MoY i nhó m tı̀m centroid (trọ ng tâ m) tương ứng • Sau đó tı́nh toE ng khoả ng cá ch (sum of squared distances) củ a ta) t cả cá c dữ liệ u thuộ c nhó m nà y đe) n centroid; sau đó cộ ng doL n đeE được toE ng củ a ta) t cả (Total sum of squared distances - TSS) • Mụ c tiê u phâ n bộ dữ liệ u ban đaL u thà nh K cụ m khá c nhau sao cho cá c dữ liệ u thuộ c cù ng mộ t cụ m là tương đoL ng nha) t; đieL u đó có nghı̃a TSS là nhỏ nha) t • Khó khá c củ a sử dụ ng K-means là lựa chọ n K sao cho to) i ưu • Mộ t hạ n che) củ a K-means đó là việ c gom cụ m mang tı́nh to) i ưu cụ c bộ vı̀ lời giả i tı̀m được că n cứ và o đieE m trọ ng tâ m được "định hướng" ban đaL u 31 • Do TSS giả m khi K tă ng, và giả m cho đe) n khô ng ne) u K baV ng so) dữ liệ u • Mặ t khá c khi tă ng K (có nghı̃a là so) cụ m tă ng), nê n thuậ t toá n trở nê n khô ng có ý nghı̃a khi so) cụ m là quá nhieL u • Chọ n K baV ng đoL thị Elbow: khi đoL thị có choY ga) p nà y rõ né t nha) t, đó là so) K to) i ưu • Cha{ ng hạ n với vı́ dụ trước, cho K được thử từ 2 cho đe) n 40 tss = [] K = range(2,41) for k in K: model = cluster.KMeans( n_clusters=k, max_iter=100 ).fit(X) tss.append( model.inertia_ ) 32 • Nhı̀n và o đoL thị Elbow, ta tha) y K = 3 là choY bị ga) p khú c nha) t plt.figure( figsize=(10,6) ) plt.plot( K,tss ) plt.title( "Đồ thị Elbow để chọn số K" ) plt.xlabel( "Số cụm" ) plt.ylabel( "Tổng tất tổng khoảng cách đến điểm trung tâm" ) plt.grid( True ) plt.show()) 33 • Nhưng do ta khô ng theE chı̉ cho má y "nhı̀n và o đoL thị" được như người, mà phả i dù ng tie) ng nà o đó đeE chı̉, ở đâ y ta lạ i dù ng "tie) ng Python" • Nhưng trước he) t phả i dù ng Toá n họ c đeE nhậ n bie) t đâ u là Elbow Point • ĐieE m Elbow là đieE m mà khoả ng cá ch từ nó đe) n đường tha{ ng đi qua 2 đieE m đaL u và cuo) i củ a đường cong là lớn nha) t • Trước tiê n: đâ y là phương trı̀nh đường tha{ ng qua 2 đieE m A, B (là mả ng cá c giá trị tung độ ) def fx(X,A,B): y = [] for i in range(len(X)): x = X[i] temp = A[1] + (X[i]-A[0])*(B[1]-A[1])/(B[0]-A[0]) y.append( temp ) return y 34 • Tı́nh khoả ng cá ch giữa những đieE m trê n đường tha{ ng nà y và những đieE m ở trê n đường cong mà có cù ng hoà nh độ , sau đó tı̀m đieE m có khoả ng cá ch lớn nha) t đeE trả veL import numpy as np from scipy.spatial import distance def ElbowPoint( x_axis, curve ): N = len(curve) S = [x_axis[0],curve[0]] E = [x_axis[N-1],curve[N-1]] y = fx( K,S,E ) • So) lượng cụ m caL n phâ n nhó m đó là vị trı́ củ a khoả ng cá ch lớn nha) t nà y NUM_CLUSTERS = ElbowPoint( K, tss ) + • Do chı̉ so) mà ng ba• t đaL u từ 0 nê n phả i cộ ng thê m 1 là vậ y đó ! dist = [] for i in range(N): x = x_axis[i] dist.append( distance.cdist([[x,curve[i]]],[[x,y[i]]]) ) File: Kmeans-sklearn.py return np.argmax( dist ) 35

Ngày đăng: 07/12/2022, 02:35

HÌNH ẢNH LIÊN QUAN

• Thuật toán K-NN hãy tı̀m đieEm (50,25) – có hình - Trí tuệ tính toán và ứng dụng
hua ̣̂t toán K-NN hãy tı̀m đieEm (50,25) – có hình (Trang 4)

TÀI LIỆU CÙNG NGƯỜI DÙNG

  • Đang cập nhật ...

TÀI LIỆU LIÊN QUAN

w