1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Trí tuệ nhân tạo và Ứng dụng tên Đề tài phân loại hoa iris dùng k neighbors

28 0 0
Tài liệu đã được kiểm tra trùng lặp

Đ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 đề Phân Loại Hoa Iris Dùng K-neighbors
Tác giả Huỳnh Ngọc Giáp Triệu, Võ Lê Quốc Bảo, Nguyễn Lê Anh Tuấn
Người hướng dẫn Phạm Nguyễn Nhựt Thanh
Trường học Trường Đại Học Công Nghệ Tp. Hồ Chí Minh
Chuyên ngành Kỹ Thuật Điện
Thể loại báo cáo đề tài
Thành phố TP HCM
Định dạng
Số trang 28
Dung lượng 632,64 KB

Nội dung

Lời Cam ĐoanHọ và tên các sinh viên thực hiện : Huỳnh Ngọc Giáp Triệu Võ Lê Quốc BảoTrọng Lớp : 22DDCA2 Chuyên ngành : Kỹ Thuật Điện Báo cáo đề tài : Phân loại hoa Iris dùng K-nesrest ne

Trang 1

BỘ GIÁO DỤC VÀ ĐÀO TẠO

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ TP HỒ CHÍ MINH

-*** -TRÍ TUỆ NHÂN TẠO VÀ ỨNG DỤNG

T ên Đề Tài : Phân Loại Hoa Iris Dùng K-neighbors

Ngành: Kỹ Thuật Điện Lớp:22DDCA2

Giảng viên hướng dẫn : Phạm Nguyễn Nhựt Thanh

Sinh viên thực hiện : HUỲNH NGỌC GIÁP TRIỆU

Trang 2

Lời Cam Đoan

Họ và tên các sinh viên thực hiện : Huỳnh Ngọc Giáp Triệu

Võ Lê Quốc BảoTrọng

Lớp : 22DDCA2

Chuyên ngành : Kỹ Thuật Điện

Báo cáo đề tài : Phân loại hoa Iris dùng K-nesrest neighbors

Chúng em xin cam đoan đây là công trình nghiên cứu của bản thân.Các kết quả nghiên cứu và các kết luận trong báo cáo là trung thực,không sao chép từ bất kỳ một nguồn nào và dưới bất kỳ hình thức nào.Trong quá trình làm chúng em có tham khảo các tài liệu liên quan nhằm khẳng định thêm sự tin cậy và cấp thiết của đề tài.Việc tham khảo các nguồn tài liệu đã được thực hiện một cách khách quan và đầy đủ trích dẫn,ghi nguồn tài liệu tham khảo đúng quy định

TP HCM , ngày tháng năm

Chữ ký các sinh viên thực hiện

Trang 3

MỤC LỤC

CHƯƠNG 1 : Giới thiệu tổng quan đề tài, đặt ra bài toán, muc tiêu và giới hạn đề tài 4

1.1 Giới thiệu tổng quan về đề tài 4

1.2 Mục tiêu của đề tài 4

1.3 Giới hạn của đề tài 5

CHƯƠNG 2 : Cơ sở lý thuyết (các giải thuật sử dụng trong đề tài, phần mềm lập trình, thư viện ) 6

2.1 Giải thuật K-nearest neighbors (KNN) 6

2.2 Phần mềm lập trình và thư viện 6

CHƯƠNG 3 : Xây dựng giải thuật 9

3.1 Mô tả bài toán 9

Input: 9

1 Tải dữ liệu: 9

2 Tiền xử lý dữ liệu: 9

CHƯƠNG 4 : Kết quả và hướng phát triển (trình bày các kết quả đạt được, nhận xét về đề xuất hướng phát triển) 11

Trang 4

CHƯƠNG 1 : Giới thiệu tổng quan đề tài, đặt ra bài toán, muc tiêu và

giới hạn đề tài

1.1

Giới thiệu tổng quan về đề tài

Phân loại hoa Iris là một bài toán kinh điển trong lĩnh vực học máy và khai phá dữ liệu, được sửdụng rộng rãi để minh họa các phương pháp phân loại Bộ dữ liệu Iris bao gồm thông tin về ba

loài hoa Iris khác nhau: Iris-setosa, Iris-versicolor, và Iris-virginica Dữ liệu này được mô tả bằng bốn đặc trưng chính: chiều dài và chiều rộng của đài hoa (sepal) cùng chiều dài và chiều rộng của cánh hoa (petal).

Phương pháp K-nearest neighbors (KNN) là một thuật toán đơn giản nhưng hiệu quả để giải

quyết bài toán phân loại KNN dựa trên nguyên tắc so sánh đối tượng cần phân loại với các đốitượng đã biết trong không gian đặc trưng, từ đó xác định nhãn dựa vào đa số láng giềng gầnnhất

1.2 Mục tiêu của đề tài

Áp dụng thuật toán KNN vào phân loại hoa Iris:

1 Xây dựng mô hình phân loại dựa trên dữ liệu Iris và thuật toán KNN

2 Tìm hiểu và tối ưu hóa tham số KKK (số lượng láng giềng gần nhất) để đạt hiệuquả phân loại cao nhất

Đánh giá hiệu suất mô hình:

1 Đánh giá mô hình qua các chỉ số như độ chính xác (accuracy), độ nhạy (recall),

độ đặc hiệu (specificity), và F1-score.

2 Phân tích các yếu tố ảnh hưởng đến hiệu suất phân loại, chẳng hạn như phân bố

dữ liệu và khoảng cách giữa các lớp

Cung cấp nền tảng lý thuyết và thực nghiệm:

1 Giới thiệu khái niệm cơ bản về KNN và cách hoạt động của nó trong không gian nhiều chiều

2 Triển khai thực nghiệm để kiểm chứng tính hiệu quả của KNN so với các

phương pháp khác trên cùng tập dữ liệu

1.3 Giới hạn của đề tài

Giới hạn về dữ liệu:

1 Bộ dữ liệu Iris là một tập dữ liệu nhỏ, chỉ gồm 150 mẫu (50 mẫu cho mỗi loàihoa), do đó không phản ánh được các bài toán phân loại phức tạp hơn trong thựctế

Trang 5

2 Các đặc trưng trong tập dữ liệu Iris khá đơn giản và phân tách tốt, dẫn đến tínhứng dụng của kết quả có thể bị hạn chế trong các bài toán với dữ liệu phức tạp hơn.

Hạn chế của phương pháp KNN:

1 KNN nhạy cảm với phân phối của dữ liệu và kích thước mẫu, dễ bị ảnh hưởng bởi

các điểm ngoại lai (outliers).

2 Chi phí tính toán cao khi áp dụng trên dữ liệu lớn do phải tính khoảng cách giữađiểm cần phân loại và tất cả các điểm trong tập huấn luyện

Phạm vi triển khai:

1 Đề tài chỉ tập trung vào một thuật toán duy nhất (KNN) và không so sánh chi tiếtvới các thuật toán phân loại khác như SVM, Decision Tree, hoặc Random Forest

2 Không đề cập sâu đến việc xử lý dữ liệu không cân bằng hoặc kỹ thuật mở rộng dữ

liệu như tăng cường dữ liệu (data augmentation).

CHƯƠNG 2 : Cơ sở lý thuyết (các giải thuật sử dụng trong đề tài,

phần mềm lập trình, thư viện )

Trang 6

2.1 Giải thuật K-nearest neighbors (KNN)

Nguyên tắc hoạt động: KNN là một thuật toán thuộc nhóm học máy không giám sát

(instance-based learning), hoạt động dựa trên khoảng cách giữa các điểm trong không gian đặc trưng Khi

cần phân loại một điểm mới, thuật toán sẽ:

Tính khoảng cách từ điểm đó đến tất cả các điểm trong tập huấn luyện

Chọn ra KKK điểm gần nhất (theo một tiêu chuẩn khoảng cách như Euclidean, Manhattan,hoặc Minkowski)

Phân loại điểm đó dựa trên nhãn của đa số KKK điểm láng giềng gần nhất

Ưu điểm :

- Đơn giản, dễ hiểu và dễ triển khai

- Hiệu quả trên các tập dữ liệu nhỏ với số lượng đặc trưng ít

Nhược điểm :

- Hiệu suất giảm khi dữ liệu có kích thước lớn (do tính toán khoảng cách phức tạp)

- Nhạy cảm với các điểm ngoại lai (outliers).

- Phụ thuộc vào tham số KKK và phương pháp tính khoảng cách

Anaconda: Môi trường tích hợp để quản lý các thư viện và gói phần mềm cần thiết.

Các thư viện Python sử dụng

NumPy: Hỗ trợ xử lý mảng và các phép toán ma trận hiệu quả.

Pandas: Cung cấp công cụ để xử lý và phân tích dữ liệu.

Trang 7

Matplotlib và Seaborn: Thư viện trực quan hóa dữ liệu.

scikit-learn: Thư viện chính để triển khai thuật toán KNN và đánh giá hiệu suất mô hình.

Các module cụ thể:

sklearn.neighbors.KNeighborsClassifier : Triển khai thuật toán KNN

sklearn.model_selection.train_test_split : Chia dữ liệu thành tập huấn luyện và kiểm tra

sklearn.metrics: Cung cấp các công cụ đánh giá hiệu suất mô hình (accuracy, confusion matrix, F1-score)

Joblib hoặc Pickle: Lưu trữ mô hình sau khi huấn luyện (nếu cần)

from warnings import filterwarnings

Quy trình triển khai

Tiền xử lý dữ liệu:

Đọc dữ liệu Iris từ tập tin có sẵn trong thư viện scikit-learn

Chuẩn hóa dữ liệu để đảm bảo các đặc trưng có thang đo tương đồng

Xây dựng và huấn luyện mô hình:

Sử dụng KNeighbors Classifier để xây dựng mô hình KNN

Tối ưu hóa tham số KKK bằng cách thử nghiệm trên tập huấn luyện

Đánh giá mô hình:

Chạy thử nghiệm trên tập kiểm tra

Sử dụng các chỉ số đánh giá để phân tích hiệu suất của mô hình

Trực quan hóa:

Trang 8

Trực quan hóa phân bố dữ liệu và kết quả phân loại.

Tối ưu hóa và thử nghiệm:

Kiểm tra ảnh hưởng của tham số khoảng cách (Euclidean, Manhattan, Minkowski).Đánh giá độ nhạy với kích thước tập dữ liệu hoặc dữ liệu bị nhiễu

Thông qua các công cụ và thư viện trên, đề tài đảm bảo cung cấp một cách tiếp cận chặt chẽ

và rõ ràng để giải quyết bài toán phân loại hoa Iris bằng thuật toán KNN

CHƯƠNG 3 : Xây dựng giải thuật

3.1

Mô tả bài toán

Trang 9

Input :

Bộ dữ liệu Iris gồm 150 mẫu với 4 đặc trưng:

Chiều dài và chiều rộng của đài hoa (sepal length, sepal width).

Chiều dài và chiều rộng của cánh hoa (petal length, petal width).

Nhãn tương ứng cho 3 loài hoa: Iris-setosa, Iris-versicolor, Iris-virginica.

Số lượng láng giềng gần nhất KKK

Phương pháp tính khoảng cách

Output:

Nhãn dự đoán của các mẫu trong tập kiểm tra

Đánh giá độ chính xác và hiệu suất của mô hình

Bước 1: Thu thập và chuẩn bị dữ liệu

1 Tải dữ liệu:

Sử dụng thư viện sklearn để tải bộ dữ liệu Iris

Chia dữ liệu thành tập huấn luyện (80%) và tập kiểm tra (20%)

2 Tiền xử lý dữ liệu:

Kiểm tra dữ liệu bị thiếu hoặc nhiễu (nếu có)

Chuẩn hóa dữ liệu để đảm bảo các đặc trưng có thang đo tương đồng

Bước 2: Xây dựng mô hình K-Nearest Neighbors

Trang 10

Dựa trên nhãn của KKK láng giềng, sử dụng quy tắc đa số để xác định nhãn của mẫu kiểm tra.

Bước 3: Đánh giá mô hình

Chỉ số đánh giá:

Sử dụng các chỉ số như:

Độ chính xác (Accuracy):

Confusion Matrix để phân tích chi tiết hơn.

F1-Score, Precision, Recall để đánh giá hiệu suất toàn diện.

Tìm tham số KKK tối ưu:

Sử dụng Cross-validation để thử nghiệm các giá trị KKK

Chọn KKK mang lại hiệu suất cao nhất

CHƯƠNG 4 : Kết quả và hướng phát triển (trình bày các kết quả đạt

được, nhận xét về đề xuất hướng phát triển)

# Import Packages

import numpy as np

Trang 11

# Load the data

df = pd.read_csv( 'iris.data' , names=columns)

df.head()

# Some basic statistical analysis about the data

df.describe() # Đã sửa 'describes' thành 'describe'

Trang 12

#Checking for null values

Trang 14

! pip install seaborn

# Import các thư viện

Trang 15

    df = pd.read_csv( 'iris.data' , names=columns)

except FileNotFoundError:

if the file path is correct.' )

# %%

# %%

# Some basic statistical analysis about the data

df.describe() # Sửa 'describes' thành 'describe'

# %%

#Checking for null values

Trang 16

l = [ 'Setosa' , 'Versicolor' , 'Virginica' ]

df_numerical = df.drop(columns=[ 'Class_label' ])

# Tính toán ma trận tương quan chỉ trên các cột số học

fig=plt.gcf()

fig.set_size_inches( 10 , )

fig=sns.heatmap(df_numerical.corr(),annot= True ,cmap= 'cubehelix' ,linewidths= 1

linecolor= 'k' ,square= True ,mask= False , vmin= -1 ,

vmax= 1 ,cbar_kws={ "orientation" : "vertical" },cbar= True )

Trang 17

! pip install seaborn

# Import các thư viện

# Đảm bảo tên cột thống nhất (chú ý 'length')

columns = [ 'Sepal length' , 'Sepal width' , 'Petal length' , 'Petal width' , 'Class_label' ]

# Load the data

try:

    df = pd.read_csv( 'iris.data' , names=columns)

except FileNotFoundError:

if the file path is correct.' )

Trang 18

# %%

# %%

# Some basic statistical analysis about the data

df.describe() # Sửa 'describes' thành 'describe'

# %%

#Checking for null values

df_numerical = df.drop(columns=[ 'Class_label' ])

# Tính toán ma trận tương quan chỉ trên các cột số học

fig=plt.gcf()

fig.set_size_inches( 10 , )

fig=sns.heatmap(df_numerical.corr(),annot= True ,cmap= 'cubehelix' ,linewidths= 1

linecolor= 'k' ,square= True ,mask= False , vmin= -1 ,

vmax= 1 ,cbar_kws={ "orientation" : "vertical" },cbar= True )

# %%

# boxplot on each feature split out by species

#Sửa tên cột Class_labels -> Class_label

df.boxplot(by= "Class_label" ,figsize=( 10 , 10 ))

plt.show() # Thêm plt.show để hiển thị boxplot

Trang 20

! pip install seaborn

# Import các thư viện

# Đảm bảo tên cột thống nhất (chú ý 'length')

columns = [ 'Sepal length' , 'Sepal width' , 'Petal length' , 'Petal width' , 'Class_label' ]

# Load the data

try:

    df = pd.read_csv( 'iris.data' , names=columns)

except FileNotFoundError:

if the file path is correct.' )

Trang 21

# %%

# %%

# Some basic statistical analysis about the data

df.describe() # Sửa 'describes' thành 'describe'

# %%

#Checking for null values

df_numerical = df.drop(columns=[ 'Class_label' ])

# Tính toán ma trận tương quan chỉ trên các cột số học

fig=plt.gcf()

fig.set_size_inches( 10 , )

fig=sns.heatmap(df_numerical.corr(),annot= True ,cmap= 'cubehelix' ,linewidths= 1

linecolor= 'k' ,square= True ,mask= False , vmin= -1 ,

vmax= 1 ,cbar_kws={ "orientation" : "vertical" },cbar= True )

# %%

# boxplot on each feature split out by species

#Sửa tên cột Class_labels -> Class_label

df.boxplot(by= "Class_label" ,figsize=( 10 , 10 ))

plt.show() # Thêm plt.show để hiển thị boxplot

Trang 22

# %%

# Visualize the whole dataset

sns.pairplot(df, hue= 'Class_label' ) # Changed 'Class_labels' to 'Class_label'

# Separate features and target

data = df.values

X = data[:, 0 4

Y = data[:, 4

Tách dữ liệu training theo cross-valdilation,k=5

# Split the data to train and test dataset.

Trang 23

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_teat = train_test_split(X, Y,

# Importing metrics for evaluation

from sklearn.metrics import confusion_matrix

from sklearn.metrics import classification_report

# ipython-input-35-0007d876747f

# Split the data to train and test dataset.

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, Y,

test_size= 0.2 ,random_state = 0 ) # Sửa 'y_teat' thành 'y_test'

# Importing metrics for evaluation

from sklearn.metrics import confusion_matrix

from sklearn.metrics import classification_report

# ipython-input-40-0007d876747f

# LogisticRegression

from sklearn.linear_model import LogisticRegression

from sklearn.metrics import accuracy_score #import accuracy_score

model1= LogisticRegression()

model1.fit(X_train, y_train)

y_pred1 = model1.predict(X_test)

# Summary of the predictions made by the model1

nghĩa

Trang 24

print ( "Confusion matrix: \n" ,confusion_matrix(y_test, y_pred1)) # Bây giờ y_test đã được định nghĩa

# Summary of the predictions made by the model2

Trang 25

# Support Vector Machine's

from sklearn.svm import SVC

model3 = SVC()

model3.fit(X_train, y_train)

y_pred3 = model3.predict(X_test)

# Summary of the predictions made by the model3

Trang 26

from sklearn.naive_bayes import GaussianNB

model4 = GaussianNB()

model4.fit(X_train, y_train)

y_pred4 = model4.predict(X_test)

# Summary of the precdictions made by the model4

# Summary off the predictions made by the model5

# Accuracy score

Trang 27

from sklearn.metrics import accuracy_score

score5 = accuracy_score(y_pred5,y_test)

#Linear Discriminant Analysis's

from sklearn.discriminant_analysis import LinearDiscriminantAnalysis model6 = LinearDiscriminantAnalysis()

model6.fit(X_train,y_train)

y_pred6 = model6.predict(X_test)

# Summary of the predictions made by the model6

Ngày đăng: 14/01/2025, 21:14

w