Project 1 - machine learning PDF

Title Project 1 - machine learning
Author Nin Lê
Course ITSS Project Management for Embedded Systems
Institution Trường Đại học Bách khoa Hà Nội
Pages 72
File Size 3.1 MB
File Type PDF
Total Downloads 243
Total Views 317

Summary

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘIVIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG─────── ***** ───────BÁO CÁO PROJECT ILập trình Python cơ bảnvà ứng dụng trong Machine LearningGiảng viên hướng dẫn: PGS. Trịnh Văn LoanSinh viên thực hiện: Lê Minh Tú MSSV: 20183651Hà Nội – 1/Mục lục Lời mở đầu.....................


Description

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG ─────── ***** ───────

BÁO CÁO PROJECT I Lập trình Python cơ bản và ứng dụng trong Machine Learning Giảng viên hướng dẫn: PGS.TS. Trịnh Văn Loan Sinh viên thực hiện: Lê Minh Tú MSSV: 20183651

Hà Nội – 1/2021

Mục lục Lời mở đầu.......................................................................................................................................4 1.

Chuyển mã nguồn C sang Python............................................................................................5 1.1. Nhập vào bán kính hình tròn và in ra chu vi, diện tích.........................................................5 1.2. Tính diện tích hình thang khi nhập vào 2 đáy và chiều cao..................................................6 1.3. In ra bit thứ n của số a...........................................................................................................6 1.4. Nhập vào số có 3 chữ số và in ra theo thứ tự ngược lại........................................................7 1.5. In ra mã ASCII của một ký tự bất kỳ nhập vào....................................................................8 1.6. Nhập điểm Toán, Lý, Hóa và in ra điểm trung bình, điểm lớn nhất và nhỏ nhất..................9 1.7. Giải phương trình bậc nhất ax+b=0......................................................................................9 1.8. Giải phương trình bậc hai: ax2 + bx + c =0.........................................................................10 1.9. Kiểm tra 3 số a, b và c có phải 3 cạnh của tam giác, nếu có thì là tam giác gì...................12 1.10. Kiểm tra năm nhuận..........................................................................................................13 1.11. In ra tam giác hình sao với chiều cao nhập từ bàn phím...................................................13 1.12. In ra các số nguyên tố nhỏ hơn n......................................................................................15 1.13. In ra BCNN và UCLN của hai số a và b...........................................................................16 1.14. In ra các số Fibonaci nhỏ hơn n........................................................................................17 1.15. Kiểm tra số hoàn hảo........................................................................................................17 1.16. Tính tổng các số chẵn và số lẻ..........................................................................................18 1.17. Tính xấp xỉ số pi................................................................................................................19 1.18: Tìm phần tử có giá trị tuyệt đối lớn nhất trong mảng n số................................................20 1.19. Liệt kê các phần tử khác nhau trong mảng.......................................................................21 1.20. Xóa các phần tử chẵn khỏi mảng......................................................................................22 1.21. Kiểm tra dãy tăng dần hoặc giảm dần...............................................................................23 1.22. Chuyển số lẻ lên đầu dãy, số chẵn xuống cuối dãy...........................................................25 1.23. Sắp xếp các số lẻ tang dần, các số chẵn tăng dần.............................................................26 1.24. Chèn x vào mảng n đã sắp xếp..........................................................................................27 1.25. Đếm số kỹ tự chứ hoa, chữ thường và chữ số...................................................................28 1.26. Đếm số từ có trong xâu.....................................................................................................29 1.27. Chuyển các ký tự đầu mỗi từ thành chữ hoa, còn lại thành chữ thường...........................29

1.28. In ra xâu theo chiều ngược lại...........................................................................................30 1.29. Loại bỏ các dấu cách thừa ở trong xâu..............................................................................30 1.30. Bài tập về cấu trúc.............................................................................................................31 1.31. Viết hàm tính diện tích và chu vi hình tròn.......................................................................35 1.32. Hàm kiểm tra số nguyên tố...............................................................................................36 1.33. Viết các hàm nhập, in, tìm giá trị lớn nhất và sắp xếp mảng............................................37 1.34. Hàm so sánh 2 xâu............................................................................................................38 1.35. Viết hàm tính khoảng cách và trung điểm của hai điểm trong không gian 3 chiều..........39 1.36. Viết hàm tính xn ................................................................................................................40 1.37. Viết hàm tìm UCLN..........................................................................................................41 1.38. Nhập mảng, lưu vào file, đọc từ file rồi sắp xếp lại..........................................................41 1.39. So sánh nội dung 2 file......................................................................................................43 1.40. Sao chép nội dung file.......................................................................................................45 1.41. Thêm nội dung vào cuối file.............................................................................................46 1.42. Đếm số ký tự, số từ và số câu trong file văn bản..............................................................47 1.43. Đọc kích thước file ảnh BMP...........................................................................................49 2.

3.

4.

Thao tác file dữ liệu âm thanh WAV, ghi và đọc file CSV.....................................................50 2.1.

Đọc dữ liệu từ file WAV và vẽ biểu đồ...........................................................................50

2.2.

Đọc dữ liệu từ file WAV và ghi lại vào file CSV............................................................52

2.3.

Đọc dữ liệu từ file CSV và vẽ biểu đồ............................................................................54

Thao tác ghi và đọc file CSV có phần tiêu đề cho từng cột...................................................56 3.1.

Ghi dữ liệu vào file CSV.................................................................................................56

3.2.

Đọc dữ liệu từ file CSV và vẽ biểu đồ............................................................................57

Giải thuật Học không giám sát Kmeans.................................................................................59

Kết luận..........................................................................................................................................65

Lời mở đầu Machine learning đang là xu hướng công nghệ phát triển mạnh và có nhiều bước tiến đột phá, thu hút sự quan tâm của những người trong và ngoài ngành. Cùng với đó Python là ngôn ngữ lập trình được sự dụng rộng rãi trong nghiên cứu, phát triển và ứng dụng Machine Learning. Sự phổ biến đó là nhờ vào các đặc điểm của Python: dễ học và dễ sử dụng, có nhiều thư viện và framework, có nhiều cộng đồng và doanh nghiệp hỗ trợ và tính di động, có thể mở rộng. Với sự phát triển như vậy, việc học ngôn ngữ lập trình Python cũng như nghiên cứu về Machine learning trở nên vô cùng quan trọng. Với sự hướng dẫn tận tình của PGS.TS. Trịnh Văn Loan, em đã bước đầu tiếp cận với cách sử dụng ngôn ngữ lập trình Python và các kiến thức và giải thuật cơ bản của Machine Learning. Báo cáo này là sự tổng kết quá trình học và nghiên cứu của em trong thời gian vừa qua. Rất mong nhận được sự chỉ bảo, đóng góp của thầy. Em xin chân thành cảm ơn. Hà Nội, ngày 11 tháng 01 năm 2021 Lê Minh Tú

1. Chuyển mã nguồn C sang Python 1.1. Nhập vào bán kính hình tròn và in ra chu vi, diện tích. pi = 3.14 r = float(input("Nhap ban kinh hinh tron: ")) c = 2 * r * pi s = r * r * pi print("Chu vi hinh tron la: "+format(c, ".2f")) print("Dien tich hinh tron la: "+format(s, ".2f"))

Dễ dàng nhận thấy sự đơn giản của Python, không cần các khai báo hàm main() như C, khai báo class rồi phương thức main() như Java gây sự khó hiểu cho người mới bắt đầu. Python đơn thuần chỉ cần các câu lệnh vô cùng rõ ràng và dễ hiểu. Điểm đặc biệt nhất là Python không dùng dấu chẩm phẩy cuối câu lệnh mà dùng dấu xuống dòng và không có câu lệnh khai báo biến, biến được tạo ra khi nó được gán một giá trị và tự động ép kiểu theo giá trị mà nó được gán. Ngoài ra một điểm khác nữa giữa Python với các ngôn ngữ lập trình khác: thay vì 2 câu lệnh gồm in ra yêu cầu nhập và một lệnh để đọc dữ liệu nhập vào thì nay chỉ cần một lệnh. Đấy chính là ưu điểm của Python giúp code dễ đọc và dễ hiểu hơn. Tuy nhiên cần ép kiểu phù hợp vì mặc định dữ liệu đọc vào từ lệnh input() là kiểu xâu, do đó trong trường hợp trên ta cần lồng nó trong hàm ép kiểu float(). Ở câu lệnh in ra, ta cần định dạng hoặc chuyển về dạng xâu với các biến kiểu số. Không như C++ với cout hay Java cộng trực tiếp số với xâu. Ở trên trong lệnh format, ".2f" là in ra số thực với 2 số thập phân sau dấu phẩy. Một lưu ý nữa với câu lệnh print() trong Python đó là nó sẽ tự động xuống dòng, không như các ngôn ngữ khác thường cần thêm ký hiệu đặc biệt “\n” để thực hiện xuống dòng. Vậy trong trường hợp không muốn xuống dòng ta cần xử lý như thế nào? Các ví dụ sau sẽ minh họa rõ hơn trường hợp này với tham số end trong lệnh print().

1.2. Tính diện tích hình thang khi nhập vào 2 đáy và chiều cao print("Nhap 2 canh day hinh thang: ") a = float(input()) b = float(input()) h = float(input("Nhap chieu cao hinh thang: ")) s = h * (a + b) / 2 print("Dien tich hinh thang la:"+format(s, ".2f"))

Ta nhập vào kích thước 2 đáy và chiều cao sau đó tính toán diện tích hình thang bằng chiều cao nhân tổng 2 đáy chia 2.

1.3. In ra bit thứ n của số a a = int(input("Nhap so nguyen duong a: ")) n = int(input("Nhap so nguyen duong n: ")) b = (a & (1 a): print("Day la 3 canh cua tam giac.") if (a == b) & (b == c): print("Day la tam giac deu.") elif (a == b) | (b == c) | (a == c): print("Day la tam giac can.") if (a * a + b * b == c * c) | (a * a + c * c == b * b) | (b * b + c * c == a * a): print("Day la tam giac vuong.") else: print("Day khong phai la 3 canh cua tam giac.")

Ba số a, b và c có thể là số đo 3 cạnh của một tam giác khi và chỉ khi thỏa mãn độ dài cạnh bất kì nhỏ hơn tổng độ dài 2 cạnh còn lại. Nếu thỏa mãn điều kiện là 3 cạnh của tam giác, ta kiểm tra thêm các tính chất đặc biệt khác: tam giác đều (có 3 cạnh bằng nhau), tam giác cân (có 2 cạnh bằng nhau) và tam giac vuông (bình phương một cạnh bằng tổng bình phương 2 cạnh còn lại) Để kiểm tra việc xảy ra một trong các điều kiện, ta sử dụng toán tử OR, được biểu diễn là | thay vì || như các ngôn ngữ khác.

1.10. Kiểm tra năm nhuận year = int(input("Nhap nam bat ky (so nguyen > 0): ")) if year % 4 != 0: print("Day khong phai la nam nhuan.") elif year % 100 != 0: print("Day la nam nhuan") elif year % 400 != 0: print("Day khong phai la nam nhuan.") else: print("Day la nam nhuan")

Đầu vào là một số nguyên dương. Điều kiện để một năm là năm nhuận là nó phải chia hết cho 4 nhưng phải không chia hết cho 100, nhưng nếu chia hết cho 100 thì phải chia hết cho 400 (tức là năm 1900 không phải năm nhuận nhưng năm 2000 là năm nhuận). Do đó ta cần kiểm tra rất nhiều điều kiện. Ví dụ này minh họa trực quan cho chúng ta các dùng lệnh if …else… và elif để kiểm tra liên tiếp các điều kiện.

1.11. In ra tam giác hình sao với chiều cao nhập từ bàn phím n = int(input("Nhap n: ")) # Tam giac vuong trai for i in range(n): s = "" for j in range(i+1): s += "*" print(s) # Tam giac vuong phai for i in range(n): s = "" for j in range(n-i-1): s += " " for j in range(n-i-1, n):

s += "*" print(s) # Tam giac can for i in range(n): s = "" for j in range(n-i-1): s += " " for j in range(n-i-1, n+i): s += "*" print(s)

Ta cần sử dụng vòng lặp để in các tam giác. Vì tam giác có chiều cao n nên ta in ra n hàng. Với tam giác vuông trái, hàng i gồm i dấu *, bên phải là khoảng trắng. Tam giác vuông phải thì hàng i có i dấu * bên phải, do đó trước nó cần có (n-i) dấu cách đằng trước. Còn với tam giác cân, hàng i có 2i+1 dấu * ở giữa, do đó trước nó là (n-i) dấu cách đắng trước. Ta cần dùng vòng lặp để thêm các giá trị cần in ra trên hàng vào xâu s bằng cách cộng xâu. Ví dụ 11 minh họa các sử dụng vòng lặp for với 1 hoặc 2 tham số, các tham số còn lại mặc định. Có thể thấy, câu lệnh trở nên ngắn gọn hơn và dễ đọc.

1.12. In ra các số nguyên tố nhỏ hơn n from math import sqrt n = int(input("Nhap n: ")) print("Cac so nguyen to nho hon "+str(n)+" la:", end=" ") for i in range(2, n): flag = 1 for j in range(2, int(sqrt(i)+1)): if i % j == 0: flag = 0 break if flag == 1: print(i, end=" ")

Trong ví dụ trên, ta sử dụng tiến hành kiểm tra với mỗi số nguyên nhỏ hơn n xem nó có là số nguyên tố không (xem nó có chia hết cho bất cứ sổ nào không vượt quá căn bậc hai của nó không), độ phức tạp là O(N2). Thực tế, ta có thể sử dụng sàng Eratosthenes với độ phức tạp O(NlogN). Đầu tiên ta đánh dấu tất cả các số từ 2 dến n là số nguyên tố. Với mỗi số nhỏ hơn căn bậc hai của n, ta tiến hành loại bỏ các số là bội của nó khỏi tập các số nguyên tố. Sau khi thực hiện xong, các số còn sót lại đều là số nguyên tố. from math import sqrt n = int(input("Nhap n: ")) print("Cac so nguyen to nho hon "+str(n)+" la:", end=" ") flag = [1]*n for i in range(2, int(sqrt(i)+1)): if flag[i]: for j in range(i*i, n, i): flag[j] = 0 for i in range(2, n): if flag[i]: print(i, end=" ")

1.13. In ra BCNN và UCLN của hai số a và b print("Nhap a va b: ") a = int(input()) b = int(input()) if a > b: min = max = else: max = min =

b a b a

# Tim UCLN i = min for i in range(min, 0, -1): if (a % i == 0) & (b % i == 0): break print("Uoc so chung lon nhat la: {}".format(i)) # Tim BCNN i = max for i in range(max, a*b+1): if (i % a == 0) & (i % b == 0): break print("Boi so chung nho nhat la: {}".format(i))

Với a và b nhập vào, ta tiến hành tìm UCLN và BCNN bằng cách duyệt toàn bộ. Với UCLN ta xét giảm dần từ số bé hơn đến 1, với BCNN xét tang dần từ số lớn hơn đến ab. Trong ví dụ này, ta đã sự dụng hàm s.format() để định dạng xâu. Như trên, số nguyên i sẽ được thay vào phần {}. Trong format có thể có nhiều tham số theo thứ tự ứng với cặp ngoặc {} trong xâu s. Ngoài ra trong {} ta có thể định các biến thay vào, chẳng hạn {:.2f} để thay vào là số thực với 2 chữ số thập phân sau dấu phẩy.

1.14. In ra các số Fibonaci nhỏ hơn n n = int(input("Nhap n: ")) print("Cac so fibonaci nho hon {} la: ".format(n), end="") f1 = 1 f2 = 1 print("{} {} ".format(f1, f2), end="") while f1 + f2 < n: f = f1+f2 print("{} ".format(f), end="") f2 = f1 f1 = f

Các số trong dãy Fibonaci nhỏ hơn 59

Ta tiến hành in lần lượt in ra các số Fibonci, chỉ dừng lại khi nếu số in ra sẽ vượt quá n. Thao tác này được thực hiện bằng vòng lặp while. Do đặc điểm dãy Fibonaci có fn=fn-1+fn-2 nên ta sử dụng 2 biến tạm f1 và f2 để lưu các số hạng trước đó của dãy, f =f1 + f2 là số tiếp theo cần in ra. Mở rộng ví dụ trước, lệnh format() được sử dụng để chèn nhiều tham số vào, tương ứng với các cặp ngoặc {} trong xâu.

1.15. Kiểm tra số hoàn hảo n = int(input("Nhap n: ")) s = 0 for i in range(1, int(n/2)): if n % i == 0: s += i if s == n: print("{} la so hoan hao.".format(n)) else: print("{} khong phai la so hoan hao.".format(n))

Kiểm trac ho thấy 15 không là số hoàn hảo

Đề bài yêu cầu kiểm tra một số nhập vào có là số hoàn hảo không. Số hoàn hảo là số bằng tổng các ước thực sự của nó (tức các ước trừ bản thân chính số đó ra). Do đó để kiểm tra một số có là số hoàn hảo, cần tính tổng các ước thực sự của nó với lưu ý rằng, ước thực sự lớn nhất không vượt quá nửa số đó (vì ước nhỏ nhất ngoài 1 chính là 2). Ta sẽ sử dụng vòng lặp xét các số từ 1 đến n/2, nếu nó là ước của n ta sẽ cộng nó vào tổng s. Cuối cùng nếu s=n ta có thể khẳng định n là số hoàn hảo.

1.16. Tính tổng các số chẵn và số lẻ s_chan = 0 s_le = 0 n = 1 while n != 0: n = int(input(“Nhap so nguyen n (nhap 0 de ket thuc): “)) if n % 2 == 0: s_chan += n else: s_le += n print(“Tong cac so chan: {}”.format(s_chan)) print(“Tong cac so le: {}”.format(s_le))

Ta tiến hành nhập lần lượt các số vào và kiểm tra xem tính chẵn lẻ của nó, sau đó cộng vào tổng chẵn hoặc tổng lẻ. Bược này được thực hiện bằng vòng lặp while và chỉ kết thúc khi ta nhập vào 0.

1.17. Tính xấp xỉ số pi e = sum i = x = d =

float(input("Nhap sai so epsilon: ")) = 0 0 1 1

while x * d > e: # Cap nhat sum sum += x # Tinh so hang tiep theo i +=1 d = -d x = float(d/ float(2 * i + 1)) print("PI = {}".format(sum*4))

Thuật toán trên tính xấp xỉ số pi với sai số cho trước dựa trên khai triển Maclaurin với hàm lượng giác. Kết quả thu được đảm bảo độ chính xác epsilon cho trước khi mà số hạng của dãy đã nhỏ hơn epsilon.

Do đó, ta cần sử dụng vòng lặp while với điều kiện lặp là số hạng cộng vào chưa nhỏ hơn epsilon. Số hạng thứ i có dạng xi =

i

(−1 ) 2i +1

do đó ta cần biến đếm i để

tính mẫu, biến d để lưu dấu của số hạng. Sau đó tiến hành cộng x vào sum, biến lưu giá trị của pi/4. Kết thúc, ta in ra 4*sum chính là kết quả của số pi.

1.18: Tìm phần tử có giá trị tuyệt đối lớn nhất trong mảng n số a = [] n = int(input("Nhap so phan tu n: ")) for i in range(n): a.append(int(input("a[{}] = ".format(i)))) max = abs(a[0]) imax = 0 for i in range(n): if abs(a[i]) > max: max = abs(a[i]) imax = i print("Phan tu {} co gia tri tuyet doi lon nhat la {}".format(imax, max))

Với n nhập vào, ta thực hiện vòng lặp để nhập vào n số trong mảng. Dùng hàm append() để lưu các giá trị này vào mảng a. Sau đó ta lại duyệt từng phần tử xem phần tử nào có trị tuyệt đối lớn nhất để lưu vào giá trị max, đồng thời cần dùng biến imax để lưu chỉ số của số này (max chỉ lưu giá trị tuyệt đối lớn nhất chứ không phải số có giá trị tuyệt đối lớn nhất). Ở bước khởi tạo, ta tạm cho rằng a[0] là số có giá trị tuyệt đối lớn nhất, sau đó tiến hành so sánh để cập nhật.

Ta sử dụng hàm abs(x) để lấy giá trị tuyệt đối của số x.

1.19. Liệt kê các phần tử khác nhau trong mảng a = [] b = [] n = int(input("Nhap so phan tu n: ")) for i in range(n): a.append(int(input("a[{}] = ".format(i)))) # Duyet tung phan tu cua mang a # Kiem tra xem phan tu a[i] co xuat hien trong mang b khong # Neu khong xuat hien thi them phan tu a[i] vao mang b m = 0 for i in range(n): flag = 1 for j in range(m): if a[i] == b[j]: flag=0 break if flag == 1: b.append(a[i]) m += 1 print("Cac phan tu khac nhau la: ", end="") for i in range(m): print("{} ".format(b[i]), end="")

Ta nhập các phần tử vào mảng a. Ta khởi tạo mảng kết quả b rỗng. Với mỗi phần tử của a, ta kiểm tra nó đã xuất hiện trong b chưa, nếu chưa ta thêm vì đây là một phần tử mới. Sau khi duyệt hết mảng a, ta thu được mảng b chính là kết quả.

1.20. Xóa các phần tử chẵn khỏi mảng a = [] n = int(input("Nhap so phan tu n: ")) for i in range(n): a.append(int(input("a[{}] = ".format(i)))) for i in range(n-1, -1, -1): if a[i] % 2 == 0: del a[i] n -= 1 print("Mang sau khi xoa cac so chan: ", end="") for i in range(n): print("{} ".format(a[i]), end="")

Ta nhập các phần tử vào mảng a. Sau đó duyệt toàn bộ các phần tử của mảng a, nếu là số chẵn sẽ tiến hành xóa phần tử đó. Ta sử dụng phép chia lấy dư a[i]%2 == 0 để kiểm tra xem có phải là số chẵn không. Để xóa một phần tử ta sử dụng lệnh del a[i], các phần tử phía sau tự động dịch sang trái để lấp vị trí trống mới xóa. Vòng lặp for i in range(n-1, -1, -1) giúp ta duyệt từ dưới lên.

1.21. Kiểm tra dãy tăng dần hoặc giảm dần n = int(input(“Nhap so phan...


Similar Free PDFs