Khoa học dữ liệu / Ngôn ngữ lập trình Python
Hãy cùng xem cách phân bổ các loại dữ liệu và biến động trong Python trong khi lặp lại thông qua một vòng lặp.
Giả sử bạn được cung cấp một danh sách [list_main] với 10 yếu tố. Bạn phải chia nó thành 3 phần. Phần đầu tiên được phân bổ cho List1, phần thứ hai cho List2 và phần thứ ba cho List3. Sự phân chia hoặc phân vùng này của danh sách tương tự như xác thực chéo K-Fold. Đối với người không quen biết, xác thực chéo là một quy trình lấy mẫu lại để truy cập vào tính chính xác của mô hình dự đoán trong thực tế. Trong xác thực chéo K gấp K, bộ dữ liệu được chia thành dữ liệu đào tạo [thường là 80%] và dữ liệu kiểm tra [thường là 20% và sẽ vẫn chưa thấy dữ liệu]. Dữ liệu đào tạo một lần nữa được chia thành các lần K hoặc phân vùng mà Inturn được coi là dữ liệu đào tạo và dữ liệu xác thực. Mô hình sẽ được đào tạo về dữ liệu đào tạo và việc xác thực mô hình sẽ được thực hiện bằng cách sử dụng dữ liệu xác thực.uppose you are given a list [list_main] with 10 elements. You have to divide it into 3 parts. The first part is allocated to list1, the second part to list2, and the third part to list3. This division or partition of the list is analogous to K-fold Cross-Validation. For the uninitiated, cross-validation is a resampling procedure to access the accuracy of a predictive model in practice. In K-fold cross-validation, the dataset is divided into training data [usually 80%] and test data [usually 20% and will remain unseen data]. The training data is again divided into k-folds or partitions that inturn is considered training data and validation data. The model will be trained on training data and the validation of the model will be done using validation data.
© GufosowaMã sau đây chia danh sách thành 3 phân vùng hoặc phần và phân bổ các phần tử của mỗi phần cho một danh sách.
list_main = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
folds = 3
section = int[len[list_main]/folds]
start_index = 0
end_index = 0
counter = 1for i in range[folds]:
if counter == 1:
end_index += section
list1 = list_main[start_index:end_index]
counter += 1
elif counter == folds:
list3 = list_main[end_index: ]
counter += 1
elif counter < folds:
start_index = end_index
end_index += section
list2 = list_main[start_index:end_index]
counter += 1
print[f'List1: {list1}']
print[f'List2: {list2}']
print[f'List3: {list3}']list1 = [1, 2, 3]
list2 = [4, 5, 6]
list3 = [7, 8, 9, 10]
Đầu ra:
List1: [1, 2, 3]
List2: [4, 5, 6]
List3: [7, 8, 9, 10]
Tuy nhiên, mã không phải là chung và nhiều loại mã hóa cứng hơn. Chẳng hạn, nếu số lượng bộ phận [nếp gấp] của List_Main tăng lên 4, thì một danh sách khác [List4] được yêu cầu để lưu trữ các yếu tố danh sách. Nếu nó được tăng lên 6, thì tổng số 6 danh sách được yêu cầu hoàn toàn. Để phù hợp với các thay đổi dựa trên số lượng phân vùng, mã cần phải được thay đổi. Cụ thể, danh sách mới cần được chỉ định. Tuy nhiên, điều đó dẫn đến sự phức tạp và nhầm lẫn hơn. Chẳng hạn, nếu nếp gấp = 4, thì phân vùng thứ hai và phân vùng thứ ba có cùng điều kiện trong mã trên [bộ đếm >
>>> if False:
... 1 + "two" # This line never runs, so no TypeError is raised
... else:
... 1 + 2
...
3
>>> 1 + "two" # Now this is type checked
TypeError: unsupported operand type[s] for +: 'int' and 'str'
Trong ví dụ đầu tiên, nhánh
List1: [1, 2, 3]
List2: [4, 5, 6]
List3: [7, 8, 9, 10]
0 không bao giờ chạy, vì vậy nó không bao giờ được kiểm tra. Ví dụ thứ hai cho thấy rằng khi List1: [1, 2, 3]
List2: [4, 5, 6]
List3: [7, 8, 9, 10]
0 được đánh giá, nó sẽ tăng List1: [1, 2, 3]
List2: [4, 5, 6]
List3: [7, 8, 9, 10]
2 vì bạn có thể thêm một số nguyên và một chuỗi trong Python.Trong ví dụ tiếp theo này, bạn thấy các biến có thể thay đổi loại không:
>>>
>>> thing = "Hello"
>>> type[thing]
>>> thing = 28.1
>>> type[thing]
Trong ví dụ đầu tiên, nhánh
List1: [1, 2, 3]
List2: [4, 5, 6]
List3: [7, 8, 9, 10]
0 không bao giờ chạy, vì vậy nó không bao giờ được kiểm tra. Ví dụ thứ hai cho thấy rằng khi List1: [1, 2, 3]
List2: [4, 5, 6]
List3: [7, 8, 9, 10]
0 được đánh giá, nó sẽ tăng List1: [1, 2, 3]
List2: [4, 5, 6]
List3: [7, 8, 9, 10]
2 vì bạn có thể thêm một số nguyên và một chuỗi trong Python.Trong ví dụ tiếp theo này, bạn thấy các biến có thể thay đổi loại không:
List1: [1, 2, 3]
List2: [4, 5, 6]
List3: [7, 8, 9, 10]
3 Trả về loại đối tượng.static typing. Static type checks are performed without running the program. In most statically typed languages, for instance C and Java,
this is done as your program is compiled. The type of a variable is not allowed to change over its lifetime.Gõ tĩnh
public class HelloTypes {
public static void main[String[] args] {
String thing;
thing = "Hello World";
System.out.println[thing];
}
}
Đối diện của gõ động là gõ tĩnh. Kiểm tra loại tĩnh được thực hiện mà không cần chạy chương trình. Ví dụ, trong hầu hết các ngôn ngữ được gõ tĩnh C và Java, điều này được thực hiện khi chương trình của bạn được biên dịch. Loại biến không được phép thay đổi trong suốt vòng đời của nó.
Trong ví dụ
List1: [1, 2, 3]
List2: [4, 5, 6]
List3: [7, 8, 9, 10]
4 này trong Java, hãy xem phần giữa, trong đó List1: [1, 2, 3]
List2: [4, 5, 6]
List3: [7, 8, 9, 10]
5 được định nghĩa tĩnh là một loại List1: [1, 2, 3]
List2: [4, 5, 6]
List3: [7, 8, 9, 10]
6 và sau đó được gán giá trị List1: [1, 2, 3]
List2: [4, 5, 6]
List3: [7, 8, 9, 10]
7:$ javac HelloTypes.java
$ java HelloTypes.class
Hello World
Đây không phải là một khóa học trên Java, vì vậy đừng lo lắng về các chi tiết cụ thể về cách tạo mã Java. Mục đích của ví dụ này là cho bạn thấy rằng có thêm các bước trong hầu hết các ngôn ngữ được đánh máy thống kê.
public class HelloTypes {
public static void main[String[] args] {
String thing;
thing = "Hello World";
thing = 42;
System.out.println[thing];
}
}
Trong ví dụ tiếp theo này, bạn sẽ sử dụng lệnh
List1: [1, 2, 3]
List2: [4, 5, 6]
List3: [7, 8, 9, 10]
8 để biên dịch chương trình. Điều này tạo ra một tệp mới có cùng tên, nhưng một tiện ích mở rộng khác List1: [1, 2, 3]
List2: [4, 5, 6]
List3: [7, 8, 9, 10]
9 thay vì print[globals[]]{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': , '__spec__': None, '__annotations__': {}, '__builtins__': , '__file__': 'demo_ref_globals.py', '__cached__': None, 'x'_ {...}}0. Đó là tệp có thể chạy bằng lệnh
print[globals[]]{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': , '__spec__': None, '__annotations__': {}, '__builtins__': , '__file__': 'demo_ref_globals.py', '__cached__': None, 'x'_ {...}}1:
$ javac Hellotypes.java
HelloTypes.java:8: error: incompatible types: int cannot be converted to String
thing = 42;
1 error
Nếu bạn cố gắng chỉ định lại
print[globals[]]{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': , '__spec__': None, '__annotations__': {}, '__builtins__': , '__file__': 'demo_ref_globals.py', '__cached__': None, 'x'_ {...}}2 thành một giá trị thuộc loại khác, ban đầu bạn sẽ không gặp lỗi. Chỉ khi mã được biên dịch, bạn mới thấy lỗi:
Dòng
print[globals[]]{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': , '__spec__': None, '__annotations__': {}, '__builtins__': , '__file__': 'demo_ref_globals.py', '__cached__': None, 'x'_ {...}}3 đang cố gắng thay đổi loại
print[globals[]]{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': , '__spec__': None, '__annotations__': {}, '__builtins__': , '__file__': 'demo_ref_globals.py', '__cached__': None, 'x'_ {...}}2 từ chuỗi thành int. Nếu bạn biên dịch mã này, bạn sẽ thấy lỗi:
- Python sẽ luôn luôn là một ngôn ngữ được đánh máy động. Tuy nhiên, PEP 484 đã giới thiệu các gợi ý loại, điều này cũng có thể thực hiện kiểm tra loại tĩnh của mã python.
- Dưới đây là một vài tài nguyên trên công cụ Bpython, vòng lặp [đọc vòng lặp inval Eval] được sử dụng trong các video này:
- Một Python tốt hơn: Bpython vs Python