Hoang  Kim

Hoang Kim

1658329225

Hướng Dẫn Dành Cho Người Mới Bắt đầu Học Tập Hợp

Thống nhất chúng ta đứng, chia rẽ chúng ta gục ngã. Cụm từ này nói về cách thức hoạt động của những người học theo nhóm. Phương pháp tập hợp là một phương pháp được sử dụng chủ yếu nhất trong các cuộc thi học máy. Công việc của nó có thể được giải thích bằng một ví dụ đơn giản.

Nếu một người mắc nhiều bệnh, thì một bác sĩ không thể chữa khỏi tất cả chúng. Người đó sẽ cần đến một bác sĩ chuyên khoa khác để được chữa khỏi. Các bác sĩ chuyên khoa này có thể liên hệ với nhau và đưa ra một lịch trình kê đơn cá nhân cho anh ta để có thể chữa khỏi hoàn toàn cho anh ta.

Đây là cách hoạt động của phương pháp tập hợp. Nó kết hợp các quyết định từ nhiều mô hình để cải thiện hiệu suất tổng thể. Cách tiếp cận này cho phép tạo ra hiệu suất dự đoán tốt hơn so với một mô hình duy nhất. Ý tưởng cơ bản là tìm hiểu một tập hợp các nhà phân loại (chuyên gia) và cho phép họ bỏ phiếu.

Mặc dù có một số lượng dường như không giới hạn các nhóm mà bạn có thể phát triển cho vấn đề mô hình dự đoán của mình, có ba phương pháp thống trị lĩnh vực học tập theo nhóm. Nhiều đến nỗi, thay vì các thuật toán, mỗi lĩnh vực là một lĩnh vực nghiên cứu đã tạo ra nhiều phương pháp chuyên biệt hơn.

Ý thức hệ đằng sau việc học này là gì?

Tôi có thể nói có 4 điều hiện lên trong đầu tôi:

  1. Một số mô hình nhất định làm tốt trong việc mô hình hóa một khía cạnh của dữ liệu, trong khi những mô hình khác làm tốt trong việc mô hình hóa một khía cạnh khác.
  2. Thay vì học một mô hình phức tạp, hãy học một vài mô hình đơn giản và kết hợp đầu ra của chúng để đưa ra quyết định cuối cùng.
  3. Trong học tập theo nhóm, sức mạnh của các mô hình khác thực hiện bù đắp các phương sai và độ chệch của mô hình riêng lẻ.
  4. Học theo nhóm sẽ cung cấp một dự đoán tổng hợp trong đó độ chính xác cuối cùng tốt hơn độ chính xác của các mô hình riêng lẻ.

Tại sao quần thể hoạt động?

Dietterich (2002) đã chỉ ra rằng quần thể khắc phục được ba vấn đề -

  • Bài toán thống kê - Bài toán thống kê nảy sinh khi không gian giả thuyết quá lớn so với lượng dữ liệu có sẵn. Do đó, có nhiều giả thuyết có cùng độ chính xác trên dữ liệu và thuật toán học chỉ chọn một trong số chúng! Có một rủi ro là độ chính xác của giả thuyết đã chọn là thấp đối với dữ liệu không nhìn thấy!
  • Vấn đề tính toán - Vấn đề tính toán phát sinh khi thuật toán học không thể đảm bảo tìm ra giả thuyết tốt nhất.
  • Bài toán biểu diễn - Bài toán biểu diễn phát sinh khi không gian giả thuyết không chứa bất kỳ xấp xỉ tốt nào của (các) lớp đích.

Bây giờ tất cả chúng ta đều hiểu rằng chúng ta cần kết hợp các mô hình để tạo ra công việc học tập đồng bộ. Có câu hỏi nảy sinh về cách chúng tôi kết hợp các mô hình không? Có nhiều cách để tạo ra một mô hình tổng thể nhưng nhìn chung, chúng tôi có hai kỹ thuật đó là:

  • Kết hợp tất cả những người học "yếu" để tạo thành một nhóm hoặc
  • Tạo ra một tập hợp các mô hình mạnh mẽ và đa dạng được lựa chọn tốt

Hãy bắt đầu với những kỹ thuật đơn giản. Những thuật ngữ này hơi tự giải thích nhưng vẫn còn, chúng ta sẽ tìm hiểu đôi điều về nó. Các kỹ thuật đơn giản này là:

  1. Số phiếu tối đa
  2. Tính trung bình
  3. Tính trung bình có trọng số

Chúng tôi sẽ thực hiện song song tất cả các kỹ thuật mà chúng tôi sẽ học cho dù nó đơn giản hay nâng cao.

BẦU CỬ TỐI ĐA

Phương pháp biểu quyết tối đa thường được sử dụng cho các vấn đề phân loại. Kỹ thuật này sử dụng nhiều mô hình để đưa ra dự đoán cho mỗi điểm dữ liệu. Các dự đoán của mỗi mô hình được coi là một 'phiếu bầu'. Các dự đoán mà chúng tôi nhận được từ phần lớn các mô hình được sử dụng làm dự đoán cuối cùng. Bạn có thể xem đây là chế độ của tất cả các dự đoán.

Để thực hiện chiến lược bỏ phiếu, chúng tôi sẽ sử dụng Bộ phân loại / Bộ điều chỉnh biểu quyết từ sklearn.ensemble.

Có hai cách tiếp cận dự đoán đa số phiếu để phân loại; họ là biểu quyết cứng và biểu quyết mềm.

  • Bỏ phiếu cứng . Dự đoán lớp có tổng số phiếu bầu lớn nhất từ ​​các mô hình
  • Bỏ phiếu mềm . Dự đoán lớp có xác suất tổng lớn nhất từ ​​các mô hình.

Bỏ phiếu cứng là thích hợp khi các mô hình được sử dụng trong nhóm biểu quyết dự đoán các nhãn lớp rõ ràng. Biểu quyết mềm là thích hợp khi các mô hình được sử dụng trong nhóm biểu quyết dự đoán xác suất thành viên của lớp. Biểu quyết mềm có thể được sử dụng cho các mô hình không tự nhiên dự đoán xác suất thành viên của lớp, mặc dù có thể yêu cầu hiệu chuẩn các điểm giống xác suất của chúng trước khi được sử dụng trong tập hợp (ví dụ: máy vectơ hỗ trợ, k-láng giềng gần nhất và cây quyết định).

Hiện nay, đôi khi rất hiếm mô hình biểu quyết được tạo ra có thể dẫn đến độ chính xác thấp hơn một trong các mô hình dự đoán. Nếu trường hợp đó phát sinh thì chúng tôi chỉ chọn mô hình dự đoán chứ không chọn mô hình bỏ phiếu. Nó có thể là mô hình biểu quyết có thể dẫn đến phương sai thấp hơn. Phương sai thấp hơn này có thể dẫn đến hiệu suất trung bình thấp hơn của tổng thể, điều này có thể mong muốn do độ ổn định hoặc độ tin cậy cao hơn của mô hình.

Vì vậy, đừng lo lắng nếu bạn thấy một cái gì đó như thế này:

Trong hình này, bạn có thể thấy độ chính xác phân loại biểu quyết cứng của chúng tôi thấp hơn so với hồi quy logistic. Sử dụng một nhóm biểu quyết nếu:

  • Nó mang lại hiệu suất tốt hơn bất kỳ mô hình nào được sử dụng trong quần thể.
  • Nó dẫn đến một phương sai thấp hơn bất kỳ mô hình nào được sử dụng trong quần thể.

Bây giờ bạn chắc hẳn đã hiểu cách sử dụng biểu quyết tối đa và loại của nó. Tôi đã sử dụng biểu quyết cứng sẽ khuyến khích bạn sử dụng biểu quyết mềm và tự mình thử.

TRÁNH

Tương tự như kỹ thuật bỏ phiếu tối đa, nhiều dự đoán được thực hiện cho mỗi điểm dữ liệu trong tính trung bình. Trong phương pháp này, chúng tôi lấy trung bình các dự đoán từ tất cả các mô hình và sử dụng nó để đưa ra dự đoán cuối cùng. Tính trung bình có thể được sử dụng để đưa ra dự đoán trong các bài toán hồi quy hoặc trong khi tính toán xác suất cho các bài toán phân loại.

averaging of predicatorsx_train,x_test,y_train,y_test= train_test_split(features, target, random_state=42)
model1 = DecisionTreeClassifier()
model2 = KNeighborsClassifier()
model3= LogisticRegression(max_iter=500)model1.fit(x_train,y_train)
model2.fit(x_train,y_train)
model3.fit(x_train,y_train)pred1=model1.predict_proba(x_test)[:,1]
pred2=model2.predict_proba(x_test)[:,1]
pred3=model3.predict_proba(x_test)[:,1]finalpred=(pred1+pred2+pred3)/3
final= np.where(finalpred>0.5,1,0)
print(metrics.classification_report(final,y_test))

Finalpred của chúng tôi sẽ cung cấp cho bạn xác suất của từng nhãn để chúng tôi sẽ chuyển nó thành biến mục tiêu của mình và chạy báo cáo phân loại. Độ chính xác của chúng tôi là khoảng 0,71. Đó là gần với bộ phân loại bỏ phiếu.

Bình quân gia quyền

Đây là một phần mở rộng của phương pháp tính trung bình. Tất cả các mô hình được ấn định các trọng số khác nhau xác định tầm quan trọng của từng mô hình để dự đoán. Ví dụ, nếu hai đồng nghiệp của bạn là nhà phê bình, trong khi những người khác không có kinh nghiệm trước trong lĩnh vực này, thì câu trả lời của hai người bạn này được coi trọng hơn những người còn lại.

weighted averagescores = evaluate_models_weight(models_weight,
x_train,x_test,y_train,y_test)
ensemble = VotingClassifier(estimators=models_weight, voting='soft', weights=scores)
ensemble.fit(x_train, y_train)

bây giờ đối với mức trung bình có trọng số, chúng tôi sẽ sử dụng cùng một bộ phân loại biểu quyết. Bộ phân loại biểu quyết có một tham số được gọi là trọng số. Sử dụng điều này, chúng tôi có thể thiết lập điểm trọng số cho từng mô hình và đưa nó qua bộ phân loại bỏ phiếu.

Bạn có thể hỏi chúng tôi sẽ thiết lập trọng lượng như thế nào. Nó hoàn toàn phụ thuộc vào bạn. Người ta có thể thiết lập nó theo cách thủ công hoặc giống như tôi, người ta có thể sử dụng precision_score hoặc bất kỳ số liệu nào như vậy.

Vì vậy, với điều này, chúng tôi đã thực hiện xong các kỹ thuật cơ bản của bộ hòa tấu. chúng tôi sẽ hướng tới một phương pháp nâng cao hơn và sau đó đi sâu vào một số thuật toán cụ thể được sử dụng.

KỸ THUẬT NÂNG CAO NÂNG CAO

Trong các kỹ thuật tiên tiến, chúng ta chủ yếu có ba loại:

  • Đóng bao
  • Thúc đẩy
  • Xếp chồng

Trước tiên, hãy xem xét việc đóng túi:

TÚI

Trong đóng bao, kết quả của nhiều mô hình được kết hợp để có được một kết quả tổng quát. Cái tên Bagging xuất phát từ chữ viết tắt của Bootstrap AGGregatING. Như tên của nó, hai thành phần quan trọng của Bagging là bootstrap và tập hợp. Bootstrapping là gì? tạo một tập dữ liệu được lấy mẫu ngẫu nhiên của tập dữ liệu gốc được gọi là bootstrapping.

Kích thước của các tập hợp con giống với kích thước của tập hợp ban đầu. Chìa khóa của phương pháp là cách thức mà mỗi mẫu của tập dữ liệu được chuẩn bị để đào tạo các thành viên trong nhóm. Mỗi mô hình nhận được mẫu tập dữ liệu duy nhất của riêng nó. Việc thay thế được thực hiện trong khi chọn mẫu. Nó có nghĩa là nếu một hàng được chọn, nó sẽ được trả về tập dữ liệu đào tạo để có thể lựa chọn lại trong cùng một tập dữ liệu đào tạo. Điều này có nghĩa là một hàng dữ liệu có thể được chọn không, một hoặc nhiều lần cho một tập dữ liệu đào tạo nhất định. Chúng ta có thể tóm tắt các yếu tố chính của đóng bao như sau:

  • Các mẫu Bootstrap của tập dữ liệu đào tạo.
  • Các cây quyết định chưa được cắt ghép phù hợp với từng mẫu.
  • Bỏ phiếu đơn giản hoặc lấy trung bình các dự đoán.

Nó làm giảm phương sai của một ước tính bằng cách lấy nhiều ước tính. Chúng tôi thực hiện các bước sau:

  1. đầu tiên, chúng ta sẽ thực hiện khởi động tạo bộ dữ liệu được lấy mẫu ngẫu nhiên từ bộ dữ liệu gốc.
  2. xây dựng và điều chỉnh một số bộ phân loại cho mỗi bản sao đa dạng này.
  3. Lấy giá trị trung bình của tất cả các dự đoán để đưa ra dự đoán tổng thể cuối cùng.

Nhiều thuật toán tổng hợp phổ biến dựa trên cách tiếp cận này, bao gồm:

  • Cây quyết định đóng bao (đóng bao chuẩn)
  • Rừng ngẫu nhiên
  • Cây phụ

Chúng tôi sẽ thực hiện ngắn hạn rừng ngẫu nhiên.

RỪNG NGẪU NHIÊN

Khu rừng ngẫu nhiên được chúng tôi sử dụng để tạo ra một cây quyết định liên quan đến trang trí. Nó tạo ra các tập hợp con ngẫu nhiên của các tính năng. Các cây nhỏ hơn được xây dựng bằng cách sử dụng các tập hợp con này tạo ra độ lặn của cây.

Rừng ngẫu nhiên là một bộ phân loại có chứa một số cây quyết định trên các tập con khác nhau của tập dữ liệu đã cho và lấy giá trị trung bình để cải thiện độ chính xác dự đoán của tập dữ liệu đó. .

from sklearn.ensemble import RandomForestClassifier
random= RandomForestClassifier()
scores = cross_val_score(random, features, target, scoring='accuracy', cv=10, n_jobs=-1)
print(scores.mean())

Điều này cho chúng tôi 0,76 điểm. Một lần nữa chúng tôi đang hướng tới điểm số tốt hơn. Rừng Ngẫu nhiên có nhiều thuộc tính và thông số. Documnetation của nó ở đây . Hãy đọc nó thật nhanh vì nó sẽ giúp bạn hiểu cách điều chỉnh các siêu tham số của bạn.

XẾP CHỒNG

Để triển khai nó như trình phân loại bỏ phiếu, chúng tôi có trình phân loại xếp chồng. Xếp chồng là một kỹ thuật học tập hợp sử dụng các dự đoán từ nhiều mô hình (ví dụ: cây quyết định, knn hoặc svm) để xây dựng một mô hình mới. Mô hình này được sử dụng để đưa ra các dự đoán trên tập thử nghiệm.

Xếp chồng là một thủ tục chung trong đó một người học được đào tạo để kết hợp những người học cá nhân. Ở đây, những người học riêng lẻ được gọi là người học cấp độ đầu tiên, trong khi người học kết hợp được gọi là người học cấp độ thứ hai, hoặc người học tổng hợp.

Hệ thống phân cấp hai cấp của mô hình là cách tiếp cận phổ biến nhất, mặc dù có thể sử dụng nhiều lớp mô hình hơn. Ví dụ: thay vì một mô hình cấp 1, chúng tôi có thể có 3 hoặc 5 mô hình cấp 1 và một mô hình cấp 2 kết hợp các dự đoán của các mô hình cấp 1 để đưa ra dự đoán.

Id triển khai giống như bộ phân loại biểu quyết. Chúng tôi chỉ cần thay thế một chút mã.

BOOSTING

Thúc đẩy là một quá trình tuần tự, trong đó mỗi mô hình tiếp theo cố gắng sửa chữa các lỗi của mô hình trước đó. Các mô hình thành công phụ thuộc vào mô hình trước đó. Hãy cùng tìm hiểu cách thức hoạt động của boost trong các bước dưới đây.

Tóm lại, nhiều thuật toán tổng hợp phổ biến dựa trên cách tiếp cận này, bao gồm:

  • AdaBoost (thúc đẩy chuẩn)
  • Máy tăng cường Gradient
  • Stochastic Gradient Bo boost (XGBoost và tương tự)

Trong hầu hết các cuộc thi, mọi người có xu hướng sử dụng các thuật toán này.

Adaboost

Tăng cường thích ứng hoặc AdaBoost là một trong những thuật toán thúc đẩy đơn giản nhất. Thông thường, cây quyết định được sử dụng để làm mô hình. Nhiều mô hình tuần tự được tạo ra, mỗi mô hình sửa chữa các lỗi từ mô hình cuối cùng. AdaBoost chỉ định trọng số cho các quan sát được dự đoán không chính xác và mô hình tiếp theo sẽ hoạt động để dự đoán các giá trị này một cách chính xác.

SÁCH TỐT NGHIỆP (GBM)

Gradient Bo boost hay GBM là một thuật toán học máy tổng hợp khác hoạt động cho cả các bài toán hồi quy và phân loại. GBM sử dụng kỹ thuật tăng cường, kết hợp một số người học yếu để tạo thành một người học mạnh. Cây hồi quy được sử dụng như một trình học cơ sở, mỗi cây tiếp theo trong chuỗi được xây dựng dựa trên các sai số được tính toán bởi cây trước đó.

GBM giảm thiểu chức năng mất điểm (MSE) bằng cách thêm những người học yếu bằng quy trình giảm dần độ dốc.

XGBoost

XGBoost (tăng cường độ dốc cực cao) là một triển khai nâng cao của thuật toán tăng cường độ dốc. XGBoost đã được chứng minh là một thuật toán ML hiệu quả cao, được sử dụng rộng rãi trong các cuộc thi học máy và hackathons. XGBoost có khả năng dự đoán cao và nhanh hơn gần 10 lần so với các kỹ thuật tăng cường độ dốc khác. Nó cũng bao gồm một loạt các quy định giúp giảm trang bị quá mức và cải thiện hiệu suất tổng thể. Do đó, nó còn được gọi là kỹ thuật ' tăng cường chính quy '. Để sử dụng XGBoost, chúng ta cần cài đặt nó dưới dạng gói.

import xgboost as xgb
model=xgb.XGBClassifier(random_state=1,learning_rate=0.01)
model.fit(x_train, y_train)
model.score(x_test,y_test)

LightGBM

GBM nhẹ đánh bại tất cả các thuật toán khác khi tập dữ liệu cực kỳ lớn. So với các thuật toán khác, Light GBM mất ít thời gian hơn để chạy trên một tập dữ liệu khổng lồ.

LightGBM là một khung tăng cường độ dốc sử dụng các thuật toán dựa trên cây và theo cách tiếp cận theo từng lá trong khi các thuật toán khác hoạt động theo mô hình tiếp cận theo cấp. Những hình ảnh dưới đây sẽ giúp bạn hiểu rõ hơn về sự khác biệt.

from lightgbm import LGBMClassifier
model= LGBMClassifier(learning_rate=0.001) 
model.fit(x_train,y_train)
model.score(x_test,y_test)

tăng mèo

CatBoost có thể tự động xử lý các biến phân loại và không yêu cầu xử lý trước dữ liệu rộng rãi như các thuật toán học máy khác. Thuật toán CatBoost xử lý hiệu quả các biến phân loại. Do đó, bạn không nên thực hiện mã hóa một nóng cho các biến phân loại. Chỉ cần tải các tệp, xác định các giá trị bị thiếu và bạn đã sẵn sàng.

from catboost import CatBoostClassifier
model=CatBoostClassifier()
model.fit(x_train,y_train,eval_set=(x_test, y_test), verbose=0)
model.score(x_test,y_test)

PHẦN KẾT LUẬN

ít nhất chúng ta có thể thấy hồi quy logistic cơ bản của chúng ta đang hoạt động tốt hơn so với mô hình tổng hợp nhưng nó là một trường hợp hiếm. Tôi sẽ khuyến khích các bạn sử dụng mô hình kết hợp với các bộ datset khác và tự mình xem các thay đổi. Phương pháp này thực sự có thể cải thiện hiệu suất của mô hình của bạn. Một trong những lý do khiến nhiều người sử dụng kỹ thuật tổng hợp trong các cuộc thi học máy.

Tôi hy vọng cuốn sổ tay này hữu ích cho người mới bắt đầu. Tiếp tục thực hành và quan sát mô hình của bạn hoạt động như thế nào.

Liên kết: https://medium.com/faun/ensemble-learning-beginners-guide-18a05490b02a

#learning #ensemble #machinelearning

What is GEEK

Buddha Community

Hướng Dẫn Dành Cho Người Mới Bắt đầu Học Tập Hợp
Hoang  Kim

Hoang Kim

1658329225

Hướng Dẫn Dành Cho Người Mới Bắt đầu Học Tập Hợp

Thống nhất chúng ta đứng, chia rẽ chúng ta gục ngã. Cụm từ này nói về cách thức hoạt động của những người học theo nhóm. Phương pháp tập hợp là một phương pháp được sử dụng chủ yếu nhất trong các cuộc thi học máy. Công việc của nó có thể được giải thích bằng một ví dụ đơn giản.

Nếu một người mắc nhiều bệnh, thì một bác sĩ không thể chữa khỏi tất cả chúng. Người đó sẽ cần đến một bác sĩ chuyên khoa khác để được chữa khỏi. Các bác sĩ chuyên khoa này có thể liên hệ với nhau và đưa ra một lịch trình kê đơn cá nhân cho anh ta để có thể chữa khỏi hoàn toàn cho anh ta.

Đây là cách hoạt động của phương pháp tập hợp. Nó kết hợp các quyết định từ nhiều mô hình để cải thiện hiệu suất tổng thể. Cách tiếp cận này cho phép tạo ra hiệu suất dự đoán tốt hơn so với một mô hình duy nhất. Ý tưởng cơ bản là tìm hiểu một tập hợp các nhà phân loại (chuyên gia) và cho phép họ bỏ phiếu.

Mặc dù có một số lượng dường như không giới hạn các nhóm mà bạn có thể phát triển cho vấn đề mô hình dự đoán của mình, có ba phương pháp thống trị lĩnh vực học tập theo nhóm. Nhiều đến nỗi, thay vì các thuật toán, mỗi lĩnh vực là một lĩnh vực nghiên cứu đã tạo ra nhiều phương pháp chuyên biệt hơn.

Ý thức hệ đằng sau việc học này là gì?

Tôi có thể nói có 4 điều hiện lên trong đầu tôi:

  1. Một số mô hình nhất định làm tốt trong việc mô hình hóa một khía cạnh của dữ liệu, trong khi những mô hình khác làm tốt trong việc mô hình hóa một khía cạnh khác.
  2. Thay vì học một mô hình phức tạp, hãy học một vài mô hình đơn giản và kết hợp đầu ra của chúng để đưa ra quyết định cuối cùng.
  3. Trong học tập theo nhóm, sức mạnh của các mô hình khác thực hiện bù đắp các phương sai và độ chệch của mô hình riêng lẻ.
  4. Học theo nhóm sẽ cung cấp một dự đoán tổng hợp trong đó độ chính xác cuối cùng tốt hơn độ chính xác của các mô hình riêng lẻ.

Tại sao quần thể hoạt động?

Dietterich (2002) đã chỉ ra rằng quần thể khắc phục được ba vấn đề -

  • Bài toán thống kê - Bài toán thống kê nảy sinh khi không gian giả thuyết quá lớn so với lượng dữ liệu có sẵn. Do đó, có nhiều giả thuyết có cùng độ chính xác trên dữ liệu và thuật toán học chỉ chọn một trong số chúng! Có một rủi ro là độ chính xác của giả thuyết đã chọn là thấp đối với dữ liệu không nhìn thấy!
  • Vấn đề tính toán - Vấn đề tính toán phát sinh khi thuật toán học không thể đảm bảo tìm ra giả thuyết tốt nhất.
  • Bài toán biểu diễn - Bài toán biểu diễn phát sinh khi không gian giả thuyết không chứa bất kỳ xấp xỉ tốt nào của (các) lớp đích.

Bây giờ tất cả chúng ta đều hiểu rằng chúng ta cần kết hợp các mô hình để tạo ra công việc học tập đồng bộ. Có câu hỏi nảy sinh về cách chúng tôi kết hợp các mô hình không? Có nhiều cách để tạo ra một mô hình tổng thể nhưng nhìn chung, chúng tôi có hai kỹ thuật đó là:

  • Kết hợp tất cả những người học "yếu" để tạo thành một nhóm hoặc
  • Tạo ra một tập hợp các mô hình mạnh mẽ và đa dạng được lựa chọn tốt

Hãy bắt đầu với những kỹ thuật đơn giản. Những thuật ngữ này hơi tự giải thích nhưng vẫn còn, chúng ta sẽ tìm hiểu đôi điều về nó. Các kỹ thuật đơn giản này là:

  1. Số phiếu tối đa
  2. Tính trung bình
  3. Tính trung bình có trọng số

Chúng tôi sẽ thực hiện song song tất cả các kỹ thuật mà chúng tôi sẽ học cho dù nó đơn giản hay nâng cao.

BẦU CỬ TỐI ĐA

Phương pháp biểu quyết tối đa thường được sử dụng cho các vấn đề phân loại. Kỹ thuật này sử dụng nhiều mô hình để đưa ra dự đoán cho mỗi điểm dữ liệu. Các dự đoán của mỗi mô hình được coi là một 'phiếu bầu'. Các dự đoán mà chúng tôi nhận được từ phần lớn các mô hình được sử dụng làm dự đoán cuối cùng. Bạn có thể xem đây là chế độ của tất cả các dự đoán.

Để thực hiện chiến lược bỏ phiếu, chúng tôi sẽ sử dụng Bộ phân loại / Bộ điều chỉnh biểu quyết từ sklearn.ensemble.

Có hai cách tiếp cận dự đoán đa số phiếu để phân loại; họ là biểu quyết cứng và biểu quyết mềm.

  • Bỏ phiếu cứng . Dự đoán lớp có tổng số phiếu bầu lớn nhất từ ​​các mô hình
  • Bỏ phiếu mềm . Dự đoán lớp có xác suất tổng lớn nhất từ ​​các mô hình.

Bỏ phiếu cứng là thích hợp khi các mô hình được sử dụng trong nhóm biểu quyết dự đoán các nhãn lớp rõ ràng. Biểu quyết mềm là thích hợp khi các mô hình được sử dụng trong nhóm biểu quyết dự đoán xác suất thành viên của lớp. Biểu quyết mềm có thể được sử dụng cho các mô hình không tự nhiên dự đoán xác suất thành viên của lớp, mặc dù có thể yêu cầu hiệu chuẩn các điểm giống xác suất của chúng trước khi được sử dụng trong tập hợp (ví dụ: máy vectơ hỗ trợ, k-láng giềng gần nhất và cây quyết định).

Hiện nay, đôi khi rất hiếm mô hình biểu quyết được tạo ra có thể dẫn đến độ chính xác thấp hơn một trong các mô hình dự đoán. Nếu trường hợp đó phát sinh thì chúng tôi chỉ chọn mô hình dự đoán chứ không chọn mô hình bỏ phiếu. Nó có thể là mô hình biểu quyết có thể dẫn đến phương sai thấp hơn. Phương sai thấp hơn này có thể dẫn đến hiệu suất trung bình thấp hơn của tổng thể, điều này có thể mong muốn do độ ổn định hoặc độ tin cậy cao hơn của mô hình.

Vì vậy, đừng lo lắng nếu bạn thấy một cái gì đó như thế này:

Trong hình này, bạn có thể thấy độ chính xác phân loại biểu quyết cứng của chúng tôi thấp hơn so với hồi quy logistic. Sử dụng một nhóm biểu quyết nếu:

  • Nó mang lại hiệu suất tốt hơn bất kỳ mô hình nào được sử dụng trong quần thể.
  • Nó dẫn đến một phương sai thấp hơn bất kỳ mô hình nào được sử dụng trong quần thể.

Bây giờ bạn chắc hẳn đã hiểu cách sử dụng biểu quyết tối đa và loại của nó. Tôi đã sử dụng biểu quyết cứng sẽ khuyến khích bạn sử dụng biểu quyết mềm và tự mình thử.

TRÁNH

Tương tự như kỹ thuật bỏ phiếu tối đa, nhiều dự đoán được thực hiện cho mỗi điểm dữ liệu trong tính trung bình. Trong phương pháp này, chúng tôi lấy trung bình các dự đoán từ tất cả các mô hình và sử dụng nó để đưa ra dự đoán cuối cùng. Tính trung bình có thể được sử dụng để đưa ra dự đoán trong các bài toán hồi quy hoặc trong khi tính toán xác suất cho các bài toán phân loại.

averaging of predicatorsx_train,x_test,y_train,y_test= train_test_split(features, target, random_state=42)
model1 = DecisionTreeClassifier()
model2 = KNeighborsClassifier()
model3= LogisticRegression(max_iter=500)model1.fit(x_train,y_train)
model2.fit(x_train,y_train)
model3.fit(x_train,y_train)pred1=model1.predict_proba(x_test)[:,1]
pred2=model2.predict_proba(x_test)[:,1]
pred3=model3.predict_proba(x_test)[:,1]finalpred=(pred1+pred2+pred3)/3
final= np.where(finalpred>0.5,1,0)
print(metrics.classification_report(final,y_test))

Finalpred của chúng tôi sẽ cung cấp cho bạn xác suất của từng nhãn để chúng tôi sẽ chuyển nó thành biến mục tiêu của mình và chạy báo cáo phân loại. Độ chính xác của chúng tôi là khoảng 0,71. Đó là gần với bộ phân loại bỏ phiếu.

Bình quân gia quyền

Đây là một phần mở rộng của phương pháp tính trung bình. Tất cả các mô hình được ấn định các trọng số khác nhau xác định tầm quan trọng của từng mô hình để dự đoán. Ví dụ, nếu hai đồng nghiệp của bạn là nhà phê bình, trong khi những người khác không có kinh nghiệm trước trong lĩnh vực này, thì câu trả lời của hai người bạn này được coi trọng hơn những người còn lại.

weighted averagescores = evaluate_models_weight(models_weight,
x_train,x_test,y_train,y_test)
ensemble = VotingClassifier(estimators=models_weight, voting='soft', weights=scores)
ensemble.fit(x_train, y_train)

bây giờ đối với mức trung bình có trọng số, chúng tôi sẽ sử dụng cùng một bộ phân loại biểu quyết. Bộ phân loại biểu quyết có một tham số được gọi là trọng số. Sử dụng điều này, chúng tôi có thể thiết lập điểm trọng số cho từng mô hình và đưa nó qua bộ phân loại bỏ phiếu.

Bạn có thể hỏi chúng tôi sẽ thiết lập trọng lượng như thế nào. Nó hoàn toàn phụ thuộc vào bạn. Người ta có thể thiết lập nó theo cách thủ công hoặc giống như tôi, người ta có thể sử dụng precision_score hoặc bất kỳ số liệu nào như vậy.

Vì vậy, với điều này, chúng tôi đã thực hiện xong các kỹ thuật cơ bản của bộ hòa tấu. chúng tôi sẽ hướng tới một phương pháp nâng cao hơn và sau đó đi sâu vào một số thuật toán cụ thể được sử dụng.

KỸ THUẬT NÂNG CAO NÂNG CAO

Trong các kỹ thuật tiên tiến, chúng ta chủ yếu có ba loại:

  • Đóng bao
  • Thúc đẩy
  • Xếp chồng

Trước tiên, hãy xem xét việc đóng túi:

TÚI

Trong đóng bao, kết quả của nhiều mô hình được kết hợp để có được một kết quả tổng quát. Cái tên Bagging xuất phát từ chữ viết tắt của Bootstrap AGGregatING. Như tên của nó, hai thành phần quan trọng của Bagging là bootstrap và tập hợp. Bootstrapping là gì? tạo một tập dữ liệu được lấy mẫu ngẫu nhiên của tập dữ liệu gốc được gọi là bootstrapping.

Kích thước của các tập hợp con giống với kích thước của tập hợp ban đầu. Chìa khóa của phương pháp là cách thức mà mỗi mẫu của tập dữ liệu được chuẩn bị để đào tạo các thành viên trong nhóm. Mỗi mô hình nhận được mẫu tập dữ liệu duy nhất của riêng nó. Việc thay thế được thực hiện trong khi chọn mẫu. Nó có nghĩa là nếu một hàng được chọn, nó sẽ được trả về tập dữ liệu đào tạo để có thể lựa chọn lại trong cùng một tập dữ liệu đào tạo. Điều này có nghĩa là một hàng dữ liệu có thể được chọn không, một hoặc nhiều lần cho một tập dữ liệu đào tạo nhất định. Chúng ta có thể tóm tắt các yếu tố chính của đóng bao như sau:

  • Các mẫu Bootstrap của tập dữ liệu đào tạo.
  • Các cây quyết định chưa được cắt ghép phù hợp với từng mẫu.
  • Bỏ phiếu đơn giản hoặc lấy trung bình các dự đoán.

Nó làm giảm phương sai của một ước tính bằng cách lấy nhiều ước tính. Chúng tôi thực hiện các bước sau:

  1. đầu tiên, chúng ta sẽ thực hiện khởi động tạo bộ dữ liệu được lấy mẫu ngẫu nhiên từ bộ dữ liệu gốc.
  2. xây dựng và điều chỉnh một số bộ phân loại cho mỗi bản sao đa dạng này.
  3. Lấy giá trị trung bình của tất cả các dự đoán để đưa ra dự đoán tổng thể cuối cùng.

Nhiều thuật toán tổng hợp phổ biến dựa trên cách tiếp cận này, bao gồm:

  • Cây quyết định đóng bao (đóng bao chuẩn)
  • Rừng ngẫu nhiên
  • Cây phụ

Chúng tôi sẽ thực hiện ngắn hạn rừng ngẫu nhiên.

RỪNG NGẪU NHIÊN

Khu rừng ngẫu nhiên được chúng tôi sử dụng để tạo ra một cây quyết định liên quan đến trang trí. Nó tạo ra các tập hợp con ngẫu nhiên của các tính năng. Các cây nhỏ hơn được xây dựng bằng cách sử dụng các tập hợp con này tạo ra độ lặn của cây.

Rừng ngẫu nhiên là một bộ phân loại có chứa một số cây quyết định trên các tập con khác nhau của tập dữ liệu đã cho và lấy giá trị trung bình để cải thiện độ chính xác dự đoán của tập dữ liệu đó. .

from sklearn.ensemble import RandomForestClassifier
random= RandomForestClassifier()
scores = cross_val_score(random, features, target, scoring='accuracy', cv=10, n_jobs=-1)
print(scores.mean())

Điều này cho chúng tôi 0,76 điểm. Một lần nữa chúng tôi đang hướng tới điểm số tốt hơn. Rừng Ngẫu nhiên có nhiều thuộc tính và thông số. Documnetation của nó ở đây . Hãy đọc nó thật nhanh vì nó sẽ giúp bạn hiểu cách điều chỉnh các siêu tham số của bạn.

XẾP CHỒNG

Để triển khai nó như trình phân loại bỏ phiếu, chúng tôi có trình phân loại xếp chồng. Xếp chồng là một kỹ thuật học tập hợp sử dụng các dự đoán từ nhiều mô hình (ví dụ: cây quyết định, knn hoặc svm) để xây dựng một mô hình mới. Mô hình này được sử dụng để đưa ra các dự đoán trên tập thử nghiệm.

Xếp chồng là một thủ tục chung trong đó một người học được đào tạo để kết hợp những người học cá nhân. Ở đây, những người học riêng lẻ được gọi là người học cấp độ đầu tiên, trong khi người học kết hợp được gọi là người học cấp độ thứ hai, hoặc người học tổng hợp.

Hệ thống phân cấp hai cấp của mô hình là cách tiếp cận phổ biến nhất, mặc dù có thể sử dụng nhiều lớp mô hình hơn. Ví dụ: thay vì một mô hình cấp 1, chúng tôi có thể có 3 hoặc 5 mô hình cấp 1 và một mô hình cấp 2 kết hợp các dự đoán của các mô hình cấp 1 để đưa ra dự đoán.

Id triển khai giống như bộ phân loại biểu quyết. Chúng tôi chỉ cần thay thế một chút mã.

BOOSTING

Thúc đẩy là một quá trình tuần tự, trong đó mỗi mô hình tiếp theo cố gắng sửa chữa các lỗi của mô hình trước đó. Các mô hình thành công phụ thuộc vào mô hình trước đó. Hãy cùng tìm hiểu cách thức hoạt động của boost trong các bước dưới đây.

Tóm lại, nhiều thuật toán tổng hợp phổ biến dựa trên cách tiếp cận này, bao gồm:

  • AdaBoost (thúc đẩy chuẩn)
  • Máy tăng cường Gradient
  • Stochastic Gradient Bo boost (XGBoost và tương tự)

Trong hầu hết các cuộc thi, mọi người có xu hướng sử dụng các thuật toán này.

Adaboost

Tăng cường thích ứng hoặc AdaBoost là một trong những thuật toán thúc đẩy đơn giản nhất. Thông thường, cây quyết định được sử dụng để làm mô hình. Nhiều mô hình tuần tự được tạo ra, mỗi mô hình sửa chữa các lỗi từ mô hình cuối cùng. AdaBoost chỉ định trọng số cho các quan sát được dự đoán không chính xác và mô hình tiếp theo sẽ hoạt động để dự đoán các giá trị này một cách chính xác.

SÁCH TỐT NGHIỆP (GBM)

Gradient Bo boost hay GBM là một thuật toán học máy tổng hợp khác hoạt động cho cả các bài toán hồi quy và phân loại. GBM sử dụng kỹ thuật tăng cường, kết hợp một số người học yếu để tạo thành một người học mạnh. Cây hồi quy được sử dụng như một trình học cơ sở, mỗi cây tiếp theo trong chuỗi được xây dựng dựa trên các sai số được tính toán bởi cây trước đó.

GBM giảm thiểu chức năng mất điểm (MSE) bằng cách thêm những người học yếu bằng quy trình giảm dần độ dốc.

XGBoost

XGBoost (tăng cường độ dốc cực cao) là một triển khai nâng cao của thuật toán tăng cường độ dốc. XGBoost đã được chứng minh là một thuật toán ML hiệu quả cao, được sử dụng rộng rãi trong các cuộc thi học máy và hackathons. XGBoost có khả năng dự đoán cao và nhanh hơn gần 10 lần so với các kỹ thuật tăng cường độ dốc khác. Nó cũng bao gồm một loạt các quy định giúp giảm trang bị quá mức và cải thiện hiệu suất tổng thể. Do đó, nó còn được gọi là kỹ thuật ' tăng cường chính quy '. Để sử dụng XGBoost, chúng ta cần cài đặt nó dưới dạng gói.

import xgboost as xgb
model=xgb.XGBClassifier(random_state=1,learning_rate=0.01)
model.fit(x_train, y_train)
model.score(x_test,y_test)

LightGBM

GBM nhẹ đánh bại tất cả các thuật toán khác khi tập dữ liệu cực kỳ lớn. So với các thuật toán khác, Light GBM mất ít thời gian hơn để chạy trên một tập dữ liệu khổng lồ.

LightGBM là một khung tăng cường độ dốc sử dụng các thuật toán dựa trên cây và theo cách tiếp cận theo từng lá trong khi các thuật toán khác hoạt động theo mô hình tiếp cận theo cấp. Những hình ảnh dưới đây sẽ giúp bạn hiểu rõ hơn về sự khác biệt.

from lightgbm import LGBMClassifier
model= LGBMClassifier(learning_rate=0.001) 
model.fit(x_train,y_train)
model.score(x_test,y_test)

tăng mèo

CatBoost có thể tự động xử lý các biến phân loại và không yêu cầu xử lý trước dữ liệu rộng rãi như các thuật toán học máy khác. Thuật toán CatBoost xử lý hiệu quả các biến phân loại. Do đó, bạn không nên thực hiện mã hóa một nóng cho các biến phân loại. Chỉ cần tải các tệp, xác định các giá trị bị thiếu và bạn đã sẵn sàng.

from catboost import CatBoostClassifier
model=CatBoostClassifier()
model.fit(x_train,y_train,eval_set=(x_test, y_test), verbose=0)
model.score(x_test,y_test)

PHẦN KẾT LUẬN

ít nhất chúng ta có thể thấy hồi quy logistic cơ bản của chúng ta đang hoạt động tốt hơn so với mô hình tổng hợp nhưng nó là một trường hợp hiếm. Tôi sẽ khuyến khích các bạn sử dụng mô hình kết hợp với các bộ datset khác và tự mình xem các thay đổi. Phương pháp này thực sự có thể cải thiện hiệu suất của mô hình của bạn. Một trong những lý do khiến nhiều người sử dụng kỹ thuật tổng hợp trong các cuộc thi học máy.

Tôi hy vọng cuốn sổ tay này hữu ích cho người mới bắt đầu. Tiếp tục thực hành và quan sát mô hình của bạn hoạt động như thế nào.

Liên kết: https://medium.com/faun/ensemble-learning-beginners-guide-18a05490b02a

#learning #ensemble #machinelearning

Duong Tran

Duong Tran

1661408429

Hướng dẫn JSON: Hướng dẫn cho người mới bắt đầu về JSON

JSON (JavaScript Object Notation) là một định dạng để chia sẻ dữ liệu. Hướng dẫn này sẽ thảo luận về dữ liệu bạn có thể sử dụng trong các tệp JSON và cấu trúc và cú pháp chung của định dạng này.

JSON , viết tắt của JavaScript Object Notation , là một định dạng để chia sẻ dữ liệu. Như tên gọi của nó, JSON có nguồn gốc từ ngôn ngữ lập trình JavaScript, nhưng nó có sẵn để sử dụng bởi nhiều ngôn ngữ bao gồm Python, Ruby, PHP và Java. JSON thường được phát âm giống như tên “Jason”.

JSON cũng có thể đọc được, nhẹ, cung cấp một giải pháp thay thế tốt cho XML và yêu cầu ít định dạng hơn nhiều. Hướng dẫn thông tin này sẽ thảo luận về dữ liệu bạn có thể sử dụng trong các tệp JSON cũng như cấu trúc và cú pháp chung của định dạng này.


Hiểu cú pháp và cấu trúc

JSON sử dụng .jsonphần mở rộng khi nó đứng một mình và khi nó được định nghĩa ở định dạng tệp khác (như trong .html), nó có thể xuất hiện bên trong dấu ngoặc kép dưới dạng chuỗi JSON hoặc nó có thể là một đối tượng được gán cho một biến. Định dạng này truyền giữa máy chủ web và máy khách hoặc trình duyệt.

Đối tượng JSON là định dạng dữ liệu khóa-giá trị thường được hiển thị trong dấu ngoặc nhọn. Khi làm việc với JSON, bạn có thể gặp các đối tượng JSON trong một .jsontệp, nhưng chúng cũng có thể tồn tại dưới dạng một đối tượng hoặc chuỗi JSON trong ngữ cảnh của một chương trình.

Đây là một ví dụ về một đối tượng JSON:

{
  "first_name" : "Sammy",
  "last_name" : "Shark",
  "location" : "Ocean",
  "online" : true,
  "followers" : 987 
}

Mặc dù đây là một ví dụ ngắn và JSON có thể dài nhiều dòng, nhưng điều này chứng tỏ rằng định dạng thường được thiết lập với hai dấu ngoặc nhọn (hoặc dấu ngoặc nhọn) được thể hiện { }ở hai đầu của nó và với các cặp khóa-giá trị được điền vào Khoảng không gian giữa. Hầu hết dữ liệu được sử dụng trong JSON cuối cùng sẽ được đóng gói trong một đối tượng JSON.

Các cặp khóa-giá trị có dấu hai chấm giữa chúng như trong "key" : "value". Mỗi cặp khóa-giá trị được phân tách bằng dấu phẩy, do đó, phần giữa của JSON liệt kê như sau "key" : "value", "key" : "value", "key": "value":. Trong ví dụ trước, cặp khóa-giá trị đầu tiên là "first_name" : "Sammy".

Các khóa JSON nằm ở phía bên trái của dấu hai chấm. Chúng cần được đặt trong dấu ngoặc kép, như trong "key", và có thể là bất kỳ chuỗi hợp lệ nào. Trong mỗi đối tượng, các khóa cần phải là duy nhất. Các chuỗi khóa này có thể bao gồm khoảng trắng, như trong "first name", nhưng điều đó có thể khiến bạn khó truy cập hơn khi bạn đang lập trình, vì vậy tốt nhất bạn nên sử dụng dấu gạch dưới, như trong "first_name".

Các giá trị JSON được tìm thấy ở bên phải của dấu hai chấm. Ở cấp độ chi tiết, chúng cần phải là một trong sáu loại dữ liệu sau:

  • dây
  • con số
  • các đối tượng
  • mảng
  • Booleans (đúng hoặc sai)
  • vô giá trị

Ở cấp độ rộng hơn, các giá trị cũng có thể được tạo thành từ các kiểu dữ liệu phức tạp của đối tượng hoặc mảng JSON, sẽ được thảo luận trong phần tiếp theo.

Mỗi kiểu dữ liệu được chuyển vào dưới dạng giá trị vào JSON sẽ duy trì cú pháp của riêng chúng, nghĩa là các chuỗi sẽ nằm trong dấu ngoặc kép, nhưng số sẽ không như vậy.

Với .jsoncác tệp, thông thường bạn sẽ nhận được một định dạng được mở rộng trên nhiều dòng, nhưng JSON cũng có thể được viết tất cả trong một dòng, như trong ví dụ sau:

{ "first_name" : "Sammy", "last_name": "Shark",  "online" : true, }

Điều này phổ biến hơn trong một loại tệp khác hoặc khi bạn gặp một chuỗi JSON.

Viết định dạng JSON trên nhiều dòng thường làm cho nó dễ đọc hơn nhiều, đặc biệt là khi xử lý một tập dữ liệu lớn. Vì JSON bỏ qua khoảng trắng giữa các phần tử của nó, bạn có thể xóa dấu hai chấm và các cặp khóa-giá trị của mình để làm cho dữ liệu thậm chí còn dễ đọc hơn cho con người:

{ 
  "first_name"  :  "Sammy", 
  "last_name"   :  "Shark", 
  "online"      :  true 
}

Điều quan trọng cần lưu ý là mặc dù chúng có vẻ giống nhau, nhưng một đối tượng JSON không có cùng định dạng với một đối tượng JavaScript , vì vậy mặc dù bạn có thể sử dụng các hàm bên trong các đối tượng JavaScript, nhưng bạn không thể sử dụng chúng làm giá trị trong JSON. Thuộc tính quan trọng nhất của JSON là nó có thể được chuyển dễ dàng giữa các ngôn ngữ lập trình ở định dạng mà tất cả các ngôn ngữ tham gia đều có thể hoạt động. Ngược lại, các đối tượng JavaScript chỉ có thể được làm việc trực tiếp thông qua ngôn ngữ lập trình JavaScript.

JSON có thể ngày càng trở nên phức tạp với cấu trúc phân cấp bao gồm các đối tượng và mảng lồng nhau. Tiếp theo, bạn sẽ tìm hiểu thêm về các cấu trúc phức tạp này.

Làm việc với các kiểu phức tạp trong JSON

JSON có thể lưu trữ các đối tượng lồng nhau ở định dạng JSON ngoài các mảng lồng nhau. Các đối tượng và mảng này sẽ được chuyển dưới dạng các giá trị được gán cho các khóa và cũng có thể bao gồm các cặp khóa-giá trị.

Đối tượng lồng nhau

Trong users.jsontệp sau, đối với mỗi người trong số bốn người dùng (,,, "sammy") "jesse""drew"một "jamie"đối tượng JSON lồng nhau được chuyển làm giá trị cho mỗi người trong số họ, với các khóa lồng nhau của riêng nó "username""location"liên quan đến từng người dùng. Mỗi mục nhập của người dùng trong khối mã sau là một ví dụ về đối tượng JSON lồng nhau:

{ 
  "sammy" : {
    "username"  : "SammyShark",
    "location"  : "Indian Ocean",
    "online"    : true,
    "followers" : 987
  },
  "jesse" : {
    "username"  : "JesseOctopus",
    "location"  : "Pacific Ocean",
    "online"    : false,
    "followers" : 432
  },
  "drew" : {
    "username"  : "DrewSquid",
    "location"  : "Atlantic Ocean",
    "online"    : false,
    "followers" : 321
  },
  "jamie" : {
    "username"  : "JamieMantisShrimp",
    "location"  : "Pacific Ocean",
    "online"    : true,
    "followers" : 654
  }
}

Trong ví dụ này, dấu ngoặc nhọn được sử dụng xuyên suốt để tạo thành một đối tượng JSON lồng nhau với tên người dùng và dữ liệu vị trí được liên kết cho mỗi người trong số bốn người dùng. Như với bất kỳ giá trị nào khác, khi sử dụng các đối tượng, dấu phẩy được sử dụng để phân tách các phần tử.

Mảng lồng nhau

Dữ liệu cũng có thể được lồng trong định dạng JSON bằng cách sử dụng các mảng JavaScript được chuyển dưới dạng giá trị. JavaScript sử dụng dấu ngoặc vuông [ ]ở một trong hai đầu của kiểu mảng của nó. Mảng là các tập hợp có thứ tự và có thể chứa các giá trị của các kiểu dữ liệu khác nhau.

Ví dụ: bạn có thể sử dụng một mảng khi xử lý nhiều dữ liệu có thể được nhóm lại với nhau, như khi có nhiều trang web và hồ sơ mạng xã hội khác nhau được liên kết với một người dùng.

Với mảng lồng nhau đầu tiên, hồ sơ người dùng cho "Sammy"có thể được biểu diễn như sau:

{ 
  "first_name" : "Sammy",
  "last_name" : "Shark",
  "location" : "Ocean",
  "websites" : [
    {
      "description" : "work",
      "URL" : "https://www.digitalocean.com/"
    },
    {
      "desciption" : "tutorials",
      "URL" : "https://www.digitalocean.com/community/tutorials"
    }
  ],
  "social_media" : [
    {
      "description" : "twitter",
      "link" : "https://twitter.com/digitalocean"
    },
    {
      "description" : "facebook",
      "link" : "https://www.facebook.com/DigitalOceanCloudHosting"
    },
    {
      "description" : "github",
      "link" : "https://github.com/digitalocean"
    }
  ]
}

"websites"Mỗi khóa và khóa "social_media"sử dụng một mảng để lồng thông tin thuộc hai liên kết trang web của Sammy và ba liên kết hồ sơ mạng xã hội. Bạn có thể xác định rằng đó là các mảng do sử dụng dấu ngoặc vuông.

Sử dụng lồng trong định dạng JSON của bạn cho phép bạn làm việc với dữ liệu phân cấp và phức tạp hơn.

So sánh JSON với XML

XML , hay e X tensible M arkup L anguage, là một cách để lưu trữ dữ liệu có thể truy cập được mà cả con người và máy móc đều có thể đọc được. Định dạng XML có sẵn để sử dụng trên nhiều ngôn ngữ lập trình.

Theo nhiều cách, XML tương tự như JSON, nhưng nó đòi hỏi nhiều văn bản hơn, khiến việc đọc và ghi lâu hơn và tốn nhiều thời gian hơn. XML cũng phải được phân tích cú pháp bằng trình phân tích cú pháp XML, nhưng JSON có thể được phân tích cú pháp bằng một hàm tiêu chuẩn. Ngoài ra, không giống như JSON, XML không thể sử dụng mảng.

Đây là một ví dụ về định dạng XML:

<users>
    <user>
        <username>SammyShark</username> <location>Indian Ocean</location>
    </user>
    <user>
        <username>JesseOctopus</username> <location>Pacific Ocean</location>
    </user>
    <user>
        <username>DrewSquir</username> <location>Atlantic Ocean</location>
    </user>
    <user>
        <username>JamieMantisShrimp</username> <location>Pacific Ocean</location>
    </user>
</users>

Bây giờ, hãy so sánh cùng một dữ liệu được hiển thị trong JSON:

{"users": [
  {"username" : "SammyShark", "location" : "Indian Ocean"},
  {"username" : "JesseOctopus", "location" : "Pacific Ocean"},
  {"username" : "DrewSquid", "location" : "Atlantic Ocean"},
  {"username" : "JamieMantisShrimp", "location" : "Pacific Ocean"}
] }

JSON nhỏ gọn hơn nhiều và không yêu cầu thẻ kết thúc trong khi XML thì có. Ngoài ra, XML không sử dụng một mảng như ví dụ này của JSON (bạn có thể biết thông qua việc sử dụng dấu ngoặc vuông).

Nếu bạn đã quen với HTML, bạn sẽ nhận thấy rằng XML khá giống nhau trong việc sử dụng các thẻ. Mặc dù JSON gọn gàng hơn và ít dài dòng hơn XML và nhanh chóng sử dụng trong nhiều trường hợp, bao gồm cả các ứng dụng AJAX, trước tiên bạn muốn hiểu loại dự án bạn đang làm trước khi quyết định sử dụng cấu trúc dữ liệu nào.

Sự kết luận

JSON là một định dạng nhẹ cho phép bạn chia sẻ, lưu trữ và làm việc với dữ liệu. Như một định dạng, JSON đã được hỗ trợ nhiều hơn trong các API, bao gồm cả API Twitter . JSON cũng là một định dạng tự nhiên để sử dụng trong JavaScript và có nhiều triển khai có sẵn để sử dụng trong các ngôn ngữ lập trình phổ biến khác nhau. Bạn có thể đọc hỗ trợ ngôn ngữ đầy đủ trên trang web " Giới thiệu JSON ".

Bởi vì bạn có thể sẽ không tạo .jsontệp của riêng mình mà mua chúng từ các nguồn khác, điều quan trọng là phải suy nghĩ ít hơn về cấu trúc của JSON và nhiều hơn về cách sử dụng JSON tốt nhất trong các chương trình của bạn. Ví dụ: bạn có thể chuyển đổi CSV hoặc dữ liệu được phân cách bằng tab mà bạn có thể tìm thấy trong các chương trình bảng tính thành JSON bằng cách sử dụng công cụ nguồn mở Mr. Data Converter . Bạn cũng có thể chuyển đổi XML sang JSON và ngược lại với trang tiện ích -online.info được cấp phép bởi Creative Commons .

Cuối cùng, khi dịch các kiểu dữ liệu khác sang JSON hoặc tạo dữ liệu của riêng bạn, bạn có thể xác thực JSON của mình bằng JSONLint và kiểm tra JSON của bạn trong ngữ cảnh phát triển web với JSFiddle .

Nguồn bài viết gốc tại https://www.digitalocean.com 

#json #javascript 

Thai  Son

Thai Son

1650595304

Cách Bắt Đầu Với React - Hướng Dẫn Cho Người Mới Bắt Đầu

React (còn được gọi là React.js hoặc ReactJS) là một thư viện JavaScript front-end mã nguồn mở miễn phí để tạo giao diện người dùng dựa trên thành phần UI.

React được duy trì bởi Meta (trước đây là Facebook) cùng với một cộng đồng các nhà phát triển và tổ chức cá nhân.

Theo khảo sát dành cho nhà phát triển Stack Overflow năm 2021 , React đã vượt qua jQuery để trở thành web framework được sử dụng phổ biến nhất với khoảng 40,14% thị phần. Nó cũng được mong muốn nhất, cứ bốn nhà phát triển thì có một người sử dụng nó. React cũng được sử dụng bởi hơn 8000 nhà lãnh đạo trong ngành.

Trong bài viết này, chúng ta sẽ xem lý do tại sao bạn nên học React và cách bắt đầu với nó.

Tại sao nên học React?

Có nhiều lý do tại sao bạn nên học React, nhưng đây là một số điểm thường được đề cập nhất được nhiều chuyên gia React nhấn mạnh:

React rất dễ sử dụng

Nhiều người, bao gồm cả tôi, thích React vì tính đơn giản, linh hoạt, hiệu suất, khả năng sử dụng, DOM ảo, các thành phần và nhiều tính năng khác.

Làm việc với React đơn giản hóa cuộc sống của chúng tôi với tư cách là nhà phát triển vì cơ sở hạ tầng đơn giản và mô-đun của nó, cho phép chúng tôi xây dựng và bảo trì các ứng dụng của mình nhanh hơn nhiều.

Có nhu cầu cao đối với các nhà phát triển React

Tại Hoa Kỳ, mức lương trung bình hàng năm cho một nhà phát triển React là 120.000 đô la. Nhiều doanh nghiệp và công ty sử dụng React, điều này buộc họ phải tìm kiếm tài năng mới hàng ngày.

Nếu bạn có bất kỳ sự e ngại nào về việc học hoặc trở thành nhà phát triển React, hãy xem xét lại. Không cần phải lo lắng - rất có thể sẽ luôn có một công việc dành cho bạn với tư cách là nhà phát triển React vì có hàng nghìn vị trí đang mở ngay bây giờ (thậm chí từ xa).

Không khó để học những điều cơ bản về React

Điều này có thể được hiểu theo cách khác, vì học React như một lập trình viên mới bắt đầu hoàn chỉnh chắc chắn sẽ mất nhiều thời gian hơn học JavaScript như một chuyên gia. Nhưng ý tôi là React không khó để nắm bắt một khi bạn đã hiểu kỹ các nguyên tắc cơ bản của JavaScript.

React cũng cho phép bạn sử dụng lại các phần chức năng đơn giản trên ứng dụng web React của bạn.

Tóm lại, React tương đối đơn giản để học, có một cộng đồng hỗ trợ lớn với nhiều dự án mã nguồn mở trên Github và cung cấp nhiều cơ hội việc làm.

Học React cũng sẽ giúp bạn hiểu rõ hơn về JavaScript, điều này sẽ có ích trong suốt sự nghiệp của bạn.

Vì React là một khung công tác JavaScript, điều quan trọng là phải hiểu một số nguyên tắc cơ bản về JavaScript để có thể hiểu và hiểu React. Đây là một bài viết chi tiết về tất cả các khái niệm và phương pháp JavaScript cơ bản này như bản đồ, bộ lọc và nhiều phương pháp khác. Điều này sẽ giúp bạn học React nhanh hơn.

Cách cài đặt React

Cách tốt nhất để cài đặt React hoặc tạo một dự án React là cài đặt nó với create-react-app. Đây là một trong những bước mà hầu hết người mới bắt đầu gặp khó khăn, nhưng trong hướng dẫn này, chúng ta sẽ xem xét cách bắt đầu đúng cách và thành công.

Chúng tôi sẽ sử dụng thiết bị đầu cuối của mình cho việc này (bạn có thể sử dụng thiết bị đầu cuối tích hợp sẵn hoặc tải xuống bất kỳ thiết bị nào bạn thích). Một điều kiện tiên quyết là phải cài đặt Node.js trên PC của bạn, biết rõ rằng cần có NPM (hoặc, cách khác, Yarn). Chúng tôi sẽ sử dụng NPM cho hướng dẫn này.

Để xác nhận rằng bạn đã cài đặt Node trên PC, chỉ cần khởi chạy thiết bị đầu cuối / dấu nhắc lệnh và nhập node -vnpm -vđể xem bạn có phiên bản nào.

create-react-appyêu cầu bạn phải cài đặt NPX , nên bạn cần đảm bảo phiên bản Node của mình không nhỏ hơn v14.0.0 và phiên bản NPM của bạn không nhỏ hơn v5.6.

Giả sử bạn có phiên bản NPM cũ hơn, bạn có thể sử dụng lệnh sau để cập nhật nó:

npm update -g

Khi bạn đã tìm ra NPM, bây giờ bạn có thể cài đặt React với create-react-app.

Nếu bạn cảm thấy khó khăn khi làm việc với các thiết bị đầu cuối, bạn có thể xem bài viết này về cách sử dụng dòng lệnh cho người mới bắt đầu .

Tạo-phản ứng-ứng dụng là gì?

Mặc dù cái tên giải thích những gì nó làm, bạn có thể bắt đầu tự hỏi điều gì create-react-appthực sự có nghĩa.

Tạo một ứng dụng React theo cách thủ công rất phức tạp và tốn thời gian, nhưng create-react-applàm cho nó dễ dàng hơn nhiều bằng cách tự động hóa tất cả các cấu hình và cài đặt gói.

create-react-applà cách tốt nhất để bắt đầu xây dựng một ứng dụng trang đơn mới trong React.

Nếu bạn muốn tìm hiểu cách tạo ứng dụng React theo cách thủ công mà không có create-react-app, bạn có thể xem hướng dẫn này .

Cách tạo một ứng dụng React

Bước đầu tiên là khởi động terminal / command prompt của bạn, điều hướng đến thư mục mà bạn muốn lưu ứng dụng React của mình, sau đó thực hiện lệnh này:

npx create-react-app my-app

Lưu ý: my-app là tên của ứng dụng chúng ta đang tạo, tuy nhiên bạn có thể đổi nó thành bất kỳ tên nào mà bạn chọn.

Quá trình cài đặt có thể mất vài phút. Sau khi hoàn tất, bạn sẽ thấy một thư mục xuất hiện trong không gian làm việc của mình với tên mà bạn đã đặt cho ứng dụng của mình. Xin chúc mừng!

Cách chạy ứng dụng React của bạn

Bây giờ, quay lại terminal và điều đầu tiên bạn cần làm là điều hướng đến thư mục nơi ứng dụng đã được cài đặt bằng cách sử dụng cd my-app. Sau đó, cuối cùng chạy npm startđể xem ứng dụng của bạn trực tuyến trên localhost: 3000.

Bạn sẽ thấy một cái gì đó như thế này:

hình ảnh-9

Cấu trúc thư mục

Chúng tôi vừa hoàn thành phần đầu tiên của bài viết này. Bây giờ chúng ta hãy tìm hiểu xem mỗi tệp và thư mục trong ứng dụng React của chúng ta có ý nghĩa và chức năng gì. Điều này rất quan trọng với tư cách là người mới bắt đầu hoặc một nhà phát triển React có kinh nghiệm.

Cấu trúc thư mục của ứng dụng React mới được tạo của bạn trông giống như sau khi bạn mở nó:

hình ảnh-10

Bây giờ hãy bắt đầu bằng cách giải thích các thư mục này và chúng đại diện cho những gì:

thư mục node_modules

Thư node_modulesmục chứa tất cả các phụ thuộc của chúng tôi và thư mục này bị bỏ qua khi chúng tôi thiết lập kiểm soát nguồn. Nhưng điều quan trọng cần lưu ý là package.jsontệp hoạt động song song với node_modulesthư mục vì nó chứa thông tin về tất cả các phần phụ thuộc cũng như một số lệnh script.

Nếu bạn xóa node_modulesthư mục, ứng dụng sẽ bị hỏng vì bạn sẽ không còn các phụ thuộc của mình nữa.

Để cài đặt lại các phần phụ thuộc này, bạn có thể sử dụng npm install- thao tác này sẽ kiểm tra pakage.jsontệp để tìm danh sách các phần phụ thuộc và sau đó cài đặt tất cả chúng. Điều này sẽ giúp bạn dễ dàng đẩy mã của mình trực tuyến hoặc chia sẻ mã của bạn với người khác mà không cần phải chia sẻ node_modulesthư mục nặng.

Lưu ý: Điều này không chỉ dành cho create-react-app.

thư mục chung

Mặc dù phần lớn công việc sẽ được thực hiện trong srcthư mục, nhưng thư mục chung có chứa một số tệp tĩnh, chẳng hạn như tệp HTML. Ví dụ: bạn có thể thay đổi tiêu đề ứng dụng web của mình, thêm CDN như Google Fonts, v.v.

Lưu ý: Đừng sợ tệp này vì nó chỉ là một tệp HTML thông thường. Mã duy nhất cần nhớ là nơi divđặt id roottoàn bộ ứng dụng React.

<div id="root"></div>

tệp .gitignore

Đúng như tên gọi, đó là một tệp chỉ định tệp và thư mục nào sẽ bị kiểm soát nguồn của chúng tôi bỏ qua.

Khi bạn mở tệp, bạn sẽ thấy danh sách các tệp đang bị bỏ qua, bao gồm cả node_modulesthư mục và xây dựng. Bạn có thể quyết định thêm một số tệp hoặc thư mục cụ thể.

xây dựng thư mục

Thư mục xây dựng là một thư mục khác mà bạn không thể thấy ngay bây giờ, nhưng bạn sẽ thấy khi xây dựng dự án của mình.

Điều này sẽ tạo một thư mục nội dung tĩnh sẵn sàng sản xuất có thể được lưu trữ hoặc triển khai bằng cách sử dụng tùy chọn kéo và thả trên một nền tảng như Netlify.

thư mục src

Cho đến nay, chúng tôi đã đề cập đến một số thư mục cơ bản, nhưng mối quan tâm chính của chúng tôi là srcthư mục, nơi diễn ra quá trình phát triển. Đây là srcthư mục trông như thế nào:

hình ảnh-11

Hãy bắt đầu với các tệp cơ bản: ,, App.jsvà ( bạn có thể xóa mọi tệp khác ngay bây giờ).index.jsindex.cssApp.css

App.js

Đây là nơi mà tất cả các thành phần của bạn cuối cùng sẽ gặp nhau. Tên của tệp không quan trọng, nhưng bạn nên giữ tên này để các nhà phát triển khác có thể hiểu mã của bạn.

index.js

Đây là điểm khởi đầu cho ứng dụng của bạn. Cụ thể hơn, đây là nơi bạn nhắm mục tiêu root idtừ index.htmltệp và hiển thị App.jstệp, đây là nơi toàn bộ tệp của bạn (các thành phần và trang) sẽ đáp ứng.

import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';

ReactDOM.render(
  <React.StrictMode>
    <App />
  </React.StrictMode>,
  document.getElementById('root')
);

App.css và index.css

Cả hai đều chứa các kiểu cho ứng dụng của bạn. Tệp index.csschứa kiểu toàn cục và App.csstệp gần như hoạt động giống như cách làm đối với App.jstệp - nhưng việc chúng tôi sử dụng tệp CSS hay không là hoàn toàn tùy thuộc vào chúng tôi. Trong khi bắt đầu, chúng tôi có thể chọn xóa một tệp và chỉ sử dụng một tệp CSS.

Hiểu JSX

JSX là một Cú pháp mở rộng JavaScript được sử dụng trong React để dễ dàng viết HTML và JavaScript cùng nhau.

Viết mã trong React mất nhiều thời gian vì bạn phải sử dụng React.createElementhàm mọi lúc, ngay cả khi bạn chỉ thêm một hàm đơn giản div.

hình ảnh-12

Hình ảnh trên mô tả cùng một đoạn mã được viết bằng JSX và với React.createElement. Bạn có thể biết cái nào dễ viết, dễ hiểu và dễ quản lý hơn bằng cách so sánh hai cái đó.

create-react-appnội bộ sử dụng Babel để chuyển đổi JSX sang JavaScript, vì vậy bạn không phải lo lắng về việc định cấu hình cấu hình babel của riêng mình với Webpack.

Một số điều Nên và Không nên của JSX

Đảm bảo rằng bạn biết một số chi tiết quan trọng sau để một số lỗi không cản trở bạn:

  • Đánh dấu của bạn thường được đặt sau câu lệnh trả về, dưới dạng một dòng mã hoặc mã khối.
  • Tất cả mã của bạn nên được gói trong một thẻ duy nhất. Đây có thể là một div, một thẻ không có nội dung (<>) hoặc bất kỳ thẻ nào khác.
const App = () => {
  return (
      <h1>JSX Title</h1>
      <p>This is first JSX Element!</p>
      <p>This is another JSX Element</p>
  );
};

Điều này hoạt động tốt với đánh dấu thông thường nhưng sẽ dẫn đến một lỗi lớn vì React yêu cầu các phần tử liền kề phải được bao bọc trong thẻ cha. Điều này đơn giản có nghĩa là để mã này chạy, nó phải được bao bọc trong thẻ cha, chẳng hạn như div, section, article, v.v.

const App = () => {
  return (
    <div>
      <h1>JSX Title</h1>
      <p>This is first JSX Element!</p>
      <p>This is another JSX Element</p>
    </div>
  );
};

Bạn cũng có thể sử dụng React.Fragmentthành phần này.

Cách thêm nhận xét vào mã JSX

Là một nhà phát triển, hiện nay thông lệ tiêu chuẩn là luôn thêm nhận xét vào mã của bạn và JSX không phải là ngoại lệ. Bạn có thể sử dụng lệnh tắt (phím tắt Cmd + / (Mac) hoặc Ctrl + / để thêm hoặc xóa một nhận xét cụ thể).

Lưu ý: Chúng ta có thể làm được nhiều điều với JSX. Bạn có thể đọc bài viết này để tìm hiểu thêm về cách hoạt động của JSX.

Tóm lại, JSX chỉ cung cấp đường cú pháp cho React.createElement (component, props, ...children)hàm.

Tiếp theo là gì?

Bây giờ bạn đã biết cách bắt đầu với React, bước tiếp theo là tìm hiểu nó đúng cách, hiểu các chức năng của nó, v.v.

Ngày nay, có rất nhiều nguồn tài nguyên tuyệt vời dành cho việc học React, rất nhiều tài nguyên đến nỗi rất khó để xác định đâu là tài nguyên hiện tại và hữu ích.

Thay vì cố gắng tham gia nhiều khóa học cùng một lúc, điều tốt nhất nên làm là tìm một hướng dẫn hữu ích và hoàn thành nó. Hãy xem Khóa học React miễn phí của freeCodeCamp cho năm 2022 hoặc Học React - Khóa học đầy đủ cho người mới bắt đầu .

Sự kết luận

Qua bài viết này, bạn đã biết React là gì, tại sao bạn nên học React, cách cài đặt nó trên máy. Bạn cũng đã biết mỗi tệp trong cấu trúc thư mục của nó có chức năng gì.

Nguồn: https://www.freecodecamp.org/news/get-started-with-react-for-beginners/

#react #reactjs 

Hong  Nhung

Hong Nhung

1635901200

Hướng Dẫn Học Arduino Trong 30 Phút Cho Người Mới Bắt đầu

Trong bài viết này, tôi sẽ Hướng Dẫn Học Arduino Trong 30 Phút Cho Người Mới Bắt đầu 

#arduino 

CODE VN

CODE VN

1641468137

Hướng dẫn về Web3.js dành cho Người mới bắt đầu - web3.eth.subscribe

web3.eth.subscribe

Các web3.eth.subscribechức năng cho phép bạn đăng ký vào các sự kiện cụ thể trong blockchain.

 Đăng ký 

web3.eth.subscribe(type [, options] [, callback]);

Thông số

  1. String - Đăng ký bạn muốn đăng ký.
  2. Mixed - (tùy chọn) Các thông số bổ sung tùy chọn, tùy thuộc vào loại đăng ký.
  3. Function- (tùy chọn) Gọi lại tùy chọn, trả về một đối tượng lỗi làm tham số đầu tiên và kết quả là tham số thứ hai. Sẽ được gọi cho mỗi đăng ký đến và chính đăng ký đó là tham số thứ 3.

Lợi nhuận

EventEmitter - Một phiên bản Đăng ký

  • subscription.id: Id đăng ký, được sử dụng để xác định và hủy đăng ký.
  • subscription.subscribe([callback]): Có thể dùng để đăng ký lại với cùng thông số.
  • subscription.unsubscribe([callback]): Hủy đăng ký và trả về TRUE trong cuộc gọi lại nếu thành công.
  • subscription.arguments: Đối số đăng ký, được sử dụng khi đăng ký lại.
  • on("data")return Object: Kích hoạt trên mỗi nhật ký đến với đối tượng nhật ký là đối số.
  • on("changed")lợi nhuận Object: Bắt lửa trên mỗi nhật ký đã bị xóa khỏi chuỗi khối. Nhật ký sẽ có thuộc tính bổ sung "removed: true".
  • on("error")return Object: Kích hoạt khi xảy ra lỗi trong đăng ký.
  • on("connected")return String: Kích hoạt một lần sau khi đăng ký được kết nối thành công. Trả về id đăng ký.

Thông báo trả về

  • Mixed - tùy thuộc vào đăng ký, hãy xem các đăng ký khác nhau để biết thêm.

Thí dụ

var subscription = web3.eth.subscribe('logs', {
    address: '0x123456..',
    topics: ['0x12345...']
}, function(error, result){
    if (!error)
        console.log(result);
});

// unsubscribes the subscription
subscription.unsubscribe(function(error, success){
    if(success)
        console.log('Successfully unsubscribed!');
});

clearSubscribe

web3.eth.clearSubscriptions()

Đặt lại đăng ký.

Ghi chú

Điều này sẽ không đặt lại đăng ký từ các gói khác như web3-shh, vì chúng sử dụng requestManager của riêng mình.

Thông số

  1. Boolean: Nếu truenó giữ "syncing"đăng ký.

Lợi nhuận

Boolean

Thí dụ

web3.eth.subscribe('logs', {} ,function(){ ... });

...

web3.eth.clearSubscriptions();

đăng ký (“Giao dịch đang chờ xử lý”)

web3.eth.subscribe('pendingTransactions' [, callback]);

Đăng ký các giao dịch đang chờ xử lý đến.

Thông số

  1. String- "pendingTransactions", loại đăng ký.
  2. Function- (tùy chọn) Gọi lại tùy chọn, trả về một đối tượng lỗi làm tham số đầu tiên và kết quả là tham số thứ hai. Sẽ được gọi cho mỗi thuê bao đến.

Lợi nhuận

EventEmitter: Một trường hợp đăng ký dưới dạng trình phát sự kiện với các sự kiện sau:

  • "data"return String: Kích hoạt mỗi giao dịch đang chờ xử lý đến và trả về băm giao dịch.
  • "error"return Object: Kích hoạt khi xảy ra lỗi trong đăng ký.

Thông báo trả về

  1. Object|Null - Tham số đầu tiên là một đối tượng lỗi nếu đăng ký không thành công.
  2. String - Tham số thứ hai là băm giao dịch.

Thí dụ

var subscription = web3.eth.subscribe('pendingTransactions', function(error, result){
    if (!error)
        console.log(result);
})
.on("data", function(transaction){
    console.log(transaction);
});

// unsubscribes the subscription
subscription.unsubscribe(function(error, success){
    if(success)
        console.log('Successfully unsubscribed!');
});

đăng ký ("newBlockHeaders")

web3.eth.subscribe('newBlockHeaders' [, callback]);

Đăng ký các tiêu đề khối đến. Điều này có thể được sử dụng như bộ đếm thời gian để kiểm tra các thay đổi trên blockchain.

Thông số

  1. String- "newBlockHeaders", loại đăng ký.
  2. Function- (tùy chọn) Gọi lại tùy chọn, trả về một đối tượng lỗi làm tham số đầu tiên và kết quả là tham số thứ hai. Sẽ được gọi cho mỗi thuê bao đến.

Lợi nhuận

EventEmitter: Một trường hợp đăng ký dưới dạng trình phát sự kiện với các sự kiện sau:

  • "data"return Object: Kích hoạt trên mỗi tiêu đề khối đến.
  • "error"return Object: Kích hoạt khi xảy ra lỗi trong đăng ký.
  • "connected"return Number: Kích hoạt một lần sau khi đăng ký được kết nối thành công. Trả về id đăng ký.

Cấu trúc của tiêu đề khối được trả về như sau:

  • number- Number: Số khối. nullkhi khối đang chờ xử lý của nó.
  • hash32 Byte - String: Băm khối. nullkhi khối đang chờ xử lý của nó.
  • parentHash32 Byte - String: Băm của khối mẹ.
  • nonce8 Byte - String: Băm của bằng chứng công việc đã tạo. nullkhi khối đang chờ xử lý của nó.
  • sha3Uncles32 Byte - String: SHA3 của dữ liệu chú trong khối.
  • logsBloom256 Byte - String: Bộ lọc nở cho các bản ghi của khối. nullkhi khối đang chờ xử lý của nó.
  • transactionsRoot32 Byte - String: Gốc của bộ ba giao dịch của khối
  • stateRoot32 Byte - String: Gốc của trie trạng thái cuối cùng của khối.
  • receiptsRoot32 Byte - String: Gốc của biên lai.
  • miner- String: Địa chỉ của người thụ hưởng mà phần thưởng khai thác đã được trao.
  • extraData- String: Trường "dữ liệu bổ sung" của khối này.
  • gasLimit- Number: Lượng khí tối đa cho phép trong khối này.
  • gasUsed- Number: Tổng lượng gas đã sử dụng của tất cả các giao dịch trong khối này.
  • timestamp- Number: Dấu thời gian unix cho thời điểm khối được đối chiếu.

Thông báo trả về

  1. Object|Null - Tham số đầu tiên là một đối tượng lỗi nếu đăng ký không thành công.
  2. Object - Đối tượng tiêu đề khối như trên.

Thí dụ

var subscription = web3.eth.subscribe('newBlockHeaders', function(error, result){
    if (!error) {
        console.log(result);

        return;
    }

    console.error(error);
})
.on("connected", function(subscriptionId){
    console.log(subscriptionId);
})
.on("data", function(blockHeader){
    console.log(blockHeader);
})
.on("error", console.error);

// unsubscribes the subscription
subscription.unsubscribe(function(error, success){
    if (success) {
        console.log('Successfully unsubscribed!');
    }
});

đăng ký (“đồng bộ hóa”)

web3.eth.subscribe('syncing' [, callback]);

Đăng ký đồng bộ hóa các sự kiện. Thao tác này sẽ trả về một đối tượng khi nút đang đồng bộ hóa và khi quá trình đồng bộ hóa kết thúc sẽ trở lại FALSE.

Thông số

  1. String- "syncing", loại đăng ký.
  2. Function- (tùy chọn) Gọi lại tùy chọn, trả về một đối tượng lỗi làm tham số đầu tiên và kết quả là tham số thứ hai. Sẽ được gọi cho mỗi thuê bao đến.

Lợi nhuận

EventEmitter: Một trường hợp đăng ký dưới dạng trình phát sự kiện với các sự kiện sau:

  • "data"return Object: Kích hoạt trên mỗi đối tượng đồng bộ hóa đến dưới dạng đối số.
  • "changed"return Object: Kích hoạt khi quá trình đồng bộ hóa được bắt đầu truevà khi kết thúc với false.
  • "error"return Object: Kích hoạt khi xảy ra lỗi trong đăng ký.

Để biết cấu trúc của một sự kiện được trả về, Objecthãy xem các giá trị trả về của web3.eth.isSyncing .

Thông báo trả về

  1. Object|Null - Tham số đầu tiên là một đối tượng lỗi nếu đăng ký không thành công.
  2. Object|Boolean- Đối tượng đồng bộ hóa, khi bắt đầu nó sẽ trả về truemột lần hoặc khi kết thúc nó sẽ trả về false một lần.

Thí dụ

var subscription = web3.eth.subscribe('syncing', function(error, sync){
    if (!error)
        console.log(sync);
})
.on("data", function(sync){
    // show some syncing stats
})
.on("changed", function(isSyncing){
    if(isSyncing) {
        // stop app operation
    } else {
        // regain app operation
    }
});

// unsubscribes the subscription
subscription.unsubscribe(function(error, success){
    if(success)
        console.log('Successfully unsubscribed!');
});

đăng ký (“nhật ký”)

web3.eth.subscribe('logs', options [, callback]);

Đăng ký nhật ký đến, được lọc theo các tùy chọn nhất định. Nếu thuộc tính fromBlocktùy chọn số hợp lệ được đặt, Web3 sẽ truy xuất nhật ký bắt đầu từ thời điểm này, lấp đầy phản hồi nếu cần.

Thông số

  1. "logs"- String, loại đăng ký.
  2. Object - Các tùy chọn đăng ký
  • fromBlock- Number: Lệnh fromBlockra lệnh chặn đăng ký sẽ bắt đầu từ đâu, nếu nó để trống, mặc định là latest(hay còn gọi là đầu chuỗi)
  • address- String|Array: Một địa chỉ hoặc danh sách các địa chỉ để chỉ lấy nhật ký từ (các) tài khoản cụ thể.
  • topics- Array: Một mảng các giá trị mà mỗi giá trị phải xuất hiện trong các mục nhập nhật ký. Thứ tự là quan trọng, nếu bạn muốn không sử dụng các chủ đề null, ví dụ [null, '0x00...']. Bạn cũng có thể chuyển một mảng khác cho mỗi chủ đề với các tùy chọn cho chủ đề đó, ví dụ:[null, ['option1', 'option2']]
  1. callback- Function: (tùy chọn) Gọi lại tùy chọn, trả về một đối tượng lỗi làm tham số đầu tiên và kết quả là tham số thứ hai. Sẽ được gọi cho mỗi thuê bao đến.

Lợi nhuận

EventEmitter: Một trường hợp đăng ký dưới dạng trình phát sự kiện với các sự kiện sau:

  • "data"return Object: Kích hoạt trên mỗi nhật ký đến với đối tượng nhật ký là đối số.
  • "changed"lợi nhuận Object: Bắt lửa trên mỗi nhật ký đã bị xóa khỏi chuỗi khối. Nhật ký sẽ có thuộc tính bổ sung "removed: true".
  • "error"return Object: Kích hoạt khi xảy ra lỗi trong đăng ký.
  • "connected"return Number: Kích hoạt một lần sau khi đăng ký được kết nối thành công. Trả về id đăng ký.

Để biết cấu trúc của một sự kiện được trả về, Objecthãy xem các giá trị trả về web3.eth.getPastEvents .

Thông báo trả về

  1. Object|Null - Tham số đầu tiên là một đối tượng lỗi nếu đăng ký không thành công.
  2. Object- Đối tượng nhật ký như trong web3.eth.getPastEvents trả về giá trị .

Thí dụ

var subscription = web3.eth.subscribe('logs', {
    address: '0x123456..',
    topics: ['0x12345...']
}, function(error, result){
    if (!error)
        console.log(result);
})
.on("connected", function(subscriptionId){
    console.log(subscriptionId);
})
.on("data", function(log){
    console.log(log);
})
.on("changed", function(log){
});

// unsubscribes the subscription
subscription.unsubscribe(function(error, success){
    if(success)
        console.log('Successfully unsubscribed!');
});

Nguồn bài viết gốc tại https://web3js.readthedocs.io