Hồi quy logistic PySpark

Hoi Quy Logistic Pyspark



Trong hướng dẫn PySpark này, chúng tôi sẽ thảo luận cách thực hiện hồi quy logistic để dự đoán liệu một người có bị ảnh hưởng bởi đột quỵ hay không. Nói chung, đột quỵ xảy ra khi một người nghiện hút thuốc/uống rượu. Các lý do khác như bệnh tim và lượng đường trong máu cao (Bệnh tiểu đường) cũng gây ra đột quỵ. Với sự trợ giúp của mô hình Học máy hồi quy logistic, chúng tôi sẽ dự đoán và hiển thị độ chính xác của mô hình của chúng tôi trên dữ liệu mẫu.

Trong hướng dẫn này, trước tiên chúng ta sẽ xem cách tiếp cận và sau đó dự đoán đột quỵ của mỗi người bằng cách phân tích dữ liệu từng bước.

Hồi quy logistic

Hồi quy logistic, còn được gọi là “Mô hình Logit”, được sử dụng trong phân tích dự đoán cho các vấn đề phân loại. Đây là mô hình Machine Learning chỉ hoạt động trên phân loại để phân loại các lớp (danh mục). Ví dụ, có hai loại trong kịch bản của chúng ta (một người bị đột quỵ và một người không bị đột quỵ). Các ứng dụng tốt nhất của mô hình là dự đoán bệnh tim, dự đoán giới tính, dự đoán tuổi thọ cây trồng, v.v.







Các bước:

1. Thu thập dữ liệu: Dữ liệu là cần thiết để thực hiện bất kỳ dự đoán/phân tích nào. Nó có thể ở dạng CSV/XLSX, trong số những dạng khác. Chúng ta có thể tải phần này vào môi trường Spark (DataFrame) bằng cách sử dụng phương thức spark.read.csv().



2. Phân tích dữ liệu : Phân tích các thuộc tính/cột được gọi là “phân tích dữ liệu”. Các cột giúp dự đoán lớp được gọi là 'thuộc tính độc lập'. Cột dẫn đến dự đoán được gọi là 'thuộc tính phụ thuộc hoặc mục tiêu'. Trong trường hợp này, chúng ta có thể sử dụng thuộc tính cột để hiển thị tất cả các cột. Phương thức riêng biệt () được sử dụng để xem các giá trị duy nhất.



3. Tiền xử lý dữ liệu: Lọc các giá trị null/thiếu được gọi là 'tiền xử lý'. Chúng tôi xóa tất cả các giá trị còn thiếu trong giai đoạn này. Máy chỉ biết ngôn ngữ nhị phân. Vì vậy, tất cả các danh mục chuỗi phải được chuyển đổi thành các giá trị phân loại số. Trong PySpark, chúng ta có thể sử dụng “StringIndexer” là lớp có sẵn trong mô-đun pyspark.ml.feature để chuyển đổi các danh mục chuỗi thành số. Nó tự động chuyển đổi chúng trong nội bộ. Chúng tôi không cần phải cung cấp các giá trị. Bạn có thể sử dụng cú pháp sau:





indexer_data=StringIndexer(inputCol= 'String_Category_ColumnName' , đầu raCol = 'Tên_cột_mới' )

4. Lắp ráp véc tơ: Bây giờ, bạn đã có dữ liệu mà máy có thể hiểu được. Trong giai đoạn này, tất cả các thuộc tính độc lập sẽ được vector hóa thành một cột duy nhất. Điều này có thể được thực hiện bằng cách sử dụng lớp VectorAssembler. Nó nhận hai tham số: Tham số đầu tiên là inputCols nhận danh sách các thuộc tính độc lập. Tham số thứ hai là outputCol vector hóa tất cả các inputCol thành biến này.

trình biên dịch chương trình=VectorAssembler(inputCols=[columns…],outputCol=vectorized_data)

5. Chuyển đổi: Bây giờ, hãy chuẩn bị dữ liệu của bạn bằng cách chuyển đổi các cột đã cập nhật (Bước 3) bằng cách sử dụng hàm transform().



trình biên dịch mã.transform (inxed_data)

6. Chuẩn bị dữ liệu cho đào tạo & kiểm tra: Trong giai đoạn này, chúng tôi chia dữ liệu thành 'đào tạo' và 'thử nghiệm'. Sẽ tốt hơn nếu chúng ta chia 70% dữ liệu để huấn luyện mô hình và 30% dữ liệu để kiểm tra mô hình. Điều này có thể đạt được bằng cách sử dụng phương thức RandomSplit(). Nó nhận một danh sách chứa hai giá trị float: một cho phân tách thử nghiệm và một giá trị khác cho phân tách tàu.

train_data,test_data=final_data.select([ 'đặc trưng' , target_column]).randomSplit([0.70.0.30])

7. Lắp mô hình & Đánh giá : Đã đến lúc điều chỉnh mô hình Hồi quy logistic. Mô hình hồi quy logistic có sẵn trong mô-đun pyspark.ml.classification. Nó lấy nhãn lớp/cột đích. Điều này dẫn đến các cột rawPrediction, xác suất và dự đoán. Kết quả của chúng tôi được lưu trữ trong cột dự đoán.

# Lắp mô hình

logistic_regression_model=LogisticRegression(labelCol=target_column).fit(train_data)

# Đánh giá mô hình

train_results=logistic_regression_model.evaluate(train_data).predictions

8. Độ chính xác & Kết quả: Đây là giai đoạn cuối cùng mà chúng tôi kiểm tra độ chính xác của mô hình bằng bất kỳ kỹ thuật kiểm tra nào.

Hãy xem xét dự án sau đây, nơi chúng tôi dự đoán liệu một người có bị ảnh hưởng bởi đột quỵ hay không bằng cách sử dụng mô hình Hồi quy Logistic.

Dự đoán đột quỵ

9. Cài đặt mô-đun PySpark trong môi trường của bạn. Sau đây là lệnh để cài đặt:

pip cài đặt pyspark

10. Hãy tạo một Khung dữ liệu PySpark với 10 bản ghi có liên quan đến chi tiết đột quỵ của 10 người. Để trình diễn, chúng tôi tạo DataFrame không có CSV. Có 7 cột trong DataFrame này. “Giới tính”, “Mức_đường huyết”, “đã lập gia đình”, “tuổi”, “bệnh_tim”, “tăng_huyết áp” là các thuộc tính độc lập và “Đột ​​quỵ” là nhãn lớp hoặc thuộc tính phụ thuộc. Điều đó có nghĩa là đột quỵ của một người phụ thuộc vào các thuộc tính độc lập này.

nhập pyspark

từ pyspark.sql nhập SparkSession

linuxhint_spark_app = SparkSession.builder.appName( 'Gợi ý Linux' ).getOrCreate()

stoke_data =[

{ 'Giới tính' : 'Nữ giới' , 'tuổi' : năm mươi , 'bệnh tim' : 'Đúng' ,

'siêu_căng thẳng' : 'Đúng' , 'đã cưới' : 'Đúng' , 'Mức_đường_đường' : 130 , 'Đột quỵ' : 1 },

{ 'Giới tính' : 'Nam giới' , 'tuổi' : hai mươi , 'bệnh tim' : 'KHÔNG' ,

'siêu_căng thẳng' : 'Đúng' , 'đã cưới' : 'KHÔNG' , 'Mức_đường_đường' : 97 , 'Đột quỵ' : 0 },

{ 'Giới tính' : 'Nam giới' , 'tuổi' : 12 , 'bệnh tim' : 'KHÔNG' ,

'siêu_căng thẳng' : 'KHÔNG' , 'đã cưới' : 'KHÔNG' , 'Mức_đường_đường' : 98 , 'Đột quỵ' : 0 },

{ 'Giới tính' : 'Nữ giới' , 'tuổi' : 90 , 'bệnh tim' : 'KHÔNG' ,

'siêu_căng thẳng' : 'KHÔNG' , 'đã cưới' : 'Đúng' , 'Mức_đường_đường' : 170 , 'Đột quỵ' : 1 },

{ 'Giới tính' : 'Nam giới' , 'tuổi' : 43 , 'bệnh tim' : 'Đúng' ,

'siêu_căng thẳng' : 'Đúng' , 'đã cưới' : 'Đúng' , 'Mức_đường_đường' : 150 , 'Đột quỵ' : 1 },

{ 'Giới tính' : 'Nữ giới' , 'tuổi' : hai mươi mốt , 'bệnh tim' : 'KHÔNG' ,

'siêu_căng thẳng' : 'KHÔNG' , 'đã cưới' : 'Đúng' , 'Mức_đường_đường' : 110 , 'Đột quỵ' : 0 },

{ 'Giới tính' : 'Nữ giới' , 'tuổi' : năm mươi , 'bệnh tim' : 'Đúng' ,

'siêu_căng thẳng' : 'KHÔNG' , 'đã cưới' : 'Đúng' , 'Mức_đường_đường' : 100 , 'Đột quỵ' : 0 },

{ 'Giới tính' : 'Nam giới' , 'tuổi' : 3. 4 , 'bệnh tim' : 'KHÔNG' ,

'siêu_căng thẳng' : 'Đúng' , 'đã cưới' : 'Đúng' , 'Mức_đường_đường' : 190 , 'Đột quỵ' : 1 },

{ 'Giới tính' : 'Nam giới' , 'tuổi' : 10 , 'bệnh tim' : 'KHÔNG' ,

'siêu_căng thẳng' : 'KHÔNG' , 'đã cưới' : 'KHÔNG' , 'Mức_đường_đường' : 90 , 'Đột quỵ' : 0 },

{ 'Giới tính' : 'Nữ giới' , 'tuổi' : 56 , 'bệnh tim' : 'Đúng' ,

'siêu_căng thẳng' : 'Đúng' , 'đã cưới' : 'Đúng' , 'Mức_đường_đường' : 145 , 'Đột quỵ' : 1 }

]

# tạo khung dữ liệu từ dữ liệu trên

stroke_df = linuxhint_spark_app.createDataFrame(stoke_data)

# Stake_df thực tế

đột quỵ_df.show()

Đầu ra:

11. Hiển thị các cột độc lập bằng phương thức select().

# Hiển thị thuộc tính độc lập

nét_df.chọn (đột quỵ_df [ 'Giới tính' ],stroke_df[ 'Mức_đường' ],stroke_df[ 'đã cưới' ],stroke_df[ 'tuổi' ],stroke_df[ 'bệnh tim' ],stroke_df[ 'hyper_tension' ]).trình diễn()

Đầu ra:

12. Hiển thị các giá trị duy nhất có trong thuộc tính đích (Stroke).

# giá trị duy nhất của thuộc tính đích

nét_df.chọn (đột quỵ_df [ 'Đột quỵ' ]).distinct().show()

Đầu ra:

13. Trả về kiểu dữ liệu của tất cả các cột bằng hàm printSchema().

# Trả về kiểu dữ liệu của tất cả các cột.

đột quỵ_df.printSchema()

Đầu ra:

Chúng ta có thể thấy rằng 4 cột là kiểu chuỗi. Hãy chuyển đổi chúng thành các giá trị số phân loại.

14. Hãy chuyển đổi các giá trị phân loại chuỗi thành các giá trị phân loại số bằng cách sử dụng StringIndexer trong các cột “Gender”, “heart_disease”, “hyper_tension” và “married” và viết chúng vào các cột Categotical_Gender, Categotical_heart_disease, Categotical_hyper_tension và Categotical_married. Lưu trữ các cột vào Khung dữ liệu indexed_data bằng phương thức fit().

từ pyspark.ml.feature nhập StringIndexer

# Chuyển đổi giá trị phân loại chuỗi thành giá trị phân loại số trong cột 'Giới tính'.

indexer_data=StringIndexer(inputCol= 'Giới tính' , đầu raCol = 'Danh mục_Giới tính' )

indexed_data=indexer_data.fit(stroke_df).transform(stroke_df)

# Chuyển đổi giá trị phân loại chuỗi thành giá trị phân loại số trong cột 'heart_disease'.

indexer_data=StringIndexer(inputCol= 'bệnh tim' , đầu raCol = 'Bệnh_tim_phân_loại' )

indexed_data=indexer_data.fit(indexed_data).transform(indexed_data)

# Chuyển đổi giá trị phân loại chuỗi thành giá trị phân loại số trong cột 'hyper_tension'.

indexer_data=StringIndexer(inputCol= 'hyper_tension' , đầu raCol = 'Categotical_hyper_tension' )

indexed_data=indexer_data.fit(indexed_data).transform(indexed_data)

# Chuyển đổi giá trị phân loại chuỗi thành giá trị phân loại số trong cột 'kết hôn'.

indexer_data=StringIndexer(inputCol= 'đã cưới' , đầu raCol = 'Categotical_married' )

indexed_data=indexer_data.fit(indexed_data).transform(indexed_data)

# Hiển thị cập nhật

indexed_data.show()

Đầu ra:

15. Chuyển đổi các cột độc lập thành một véc-tơ bằng cách sử dụng trình biên dịch mã véc-tơ. Tên vector là 'tính năng'.

từ pyspark.ml.feature nhập VectorAssembler

trình biên dịch chương trình = VectorAssembler(inputCols=[ 'Danh mục_Giới tính' , 'Bệnh_tim_phân_loại' , 'Categotical_hyper_tension' , 'Categotical_married' , 'tuổi' ,

'Mức_đường_đường' ], đầu raCol = 'đặc trưng' )

16. Chuyển đổi dữ liệu trước đó thành DataFrame cuối cùng bằng cách sử dụng hàm transform() và hiển thị nó bằng hàm show().

Đầu ra:

17. Chuẩn bị dữ liệu cho huấn luyện và kiểm tra bằng cách chia thành 70-30. “Các tính năng” được lưu trữ trong train_data và “Stroke” được lưu trữ trong test_data.

# Chuẩn bị dữ liệu cho đào tạo và thử nghiệm

train_data,test_data=final.select([ 'đặc trưng' , 'Đột quỵ' ]).randomSplit([ 0,70 , 0,30 ])

18. Điều chỉnh mô hình hồi quy logistic và đánh giá nó.

từ pyspark.ml.classification nhập LogisticRegression

# Lắp mô hình

logistic_regression_model=LogisticRegression(nhãnCol= 'Đột quỵ' .fit(train_data)

# Đánh giá mô hình

train_results=logistic_regression_model.evaluate(train_data).predictions

train_results.show()

Đầu ra:

19. Sử dụng BinaryClassificationEvaluator để kiểm tra độ chính xác của mô hình. Chúng tôi có thể thấy rằng mô hình của chúng tôi là chính xác 100%.

từ pyspark.ml.evaluation nhập BinaryClassificationEvaluator

# gọi BinaryClassificationEvaluator

kết quả = BinaryClassificationEvaluator(rawPredictionCol= 'sự dự đoán' ,nhãnCol= 'Đột quỵ' )

ROC_AUC = results.evaluate(train_results)

in(ROC_AUC * 100 , '% Sự chính xác' )

Phần kết luận

Bạn có thể dự đoán vấn đề phân loại ô thực bằng cách sử dụng mô hình Hồi quy logistic trong PySpark. Việc loại bỏ các giá trị rỗng/thiếu là rất quan trọng vì chúng làm giảm độ chính xác và đánh giá của mô hình. Tiền xử lý là một bước cần thiết trước khi phù hợp với bất kỳ mô hình máy học nào. Hãy chắc chắn rằng bạn thực hiện bước này đúng cách và chính xác.