Giới thiệu về Machine Learning dành cho nhà phát triển


Lý Mạnh Thắng
8 tháng trước
Hữu ích 8 Chia sẻ Viết bình luận 0
Đã xem 3276

Chào mừng bạn đến với thế giới của máy học với scikit-learn. Máy học có thể bị áp đảo nhiều lần và điều này một phần là do một số lượng lớn các công cụ có sẵn trên thị trường. Bài đăng này sẽ đơn giản hóa quá trình lựa chọn công cụ này thành một - scikit-learn.

Trong loạt bài này, bạn sẽ tìm hiểu cách xây dựng một đường ống học máy từ đầu đến cuối bằng cách sử dụng một số thuật toán phổ biến nhất được sử dụng rộng rãi trong các cuộc thi công nghiệp và chuyên nghiệp, như Kaggle.

Tuy nhiên, trong bài giới thiệu này, chúng tôi sẽ đi qua các chủ đề sau:

  • Giới thiệu ngắn gọn về học máy
  • Scikit-learn là gì?
  • Cài đặt scikit-learn
  • Các thuật toán mà bạn sẽ học để thực hiện scikit-learn theo chuỗi.
  • Ví dụ để xây dựng mô hình hồi quy đầu tiên của bạn

Bây giờ, hãy bắt đầu cuộc hành trình thú vị này vào thế giới của máy học với scikit - learn!

Giới thiệu tóm tắt về Machine Learning

Học máy đã tạo ra tiếng vang lớn - từ Elon Musk sợ vai trò của trí tuệ nhân tạo không được kiểm soát trong xã hội đến Mark Zuckerberg có quan điểm trái ngược với Musk.

Vậy, chính xác thì học máy là gì? Nói một cách đơn giản, đó là một tập hợp các phương thức có thể phát hiện các mẫu trong dữ liệu và sử dụng các mẫu đó để đưa ra dự đoán trong tương lai. Học máy đã tìm thấy giá trị to lớn trong một loạt các ngành công nghiệp, từ tài chính đến chăm sóc sức khỏe. Điều này có nghĩa là yêu cầu cao hơn về tài năng với vốn kỹ năng trong lĩnh vực học máy.

Dưới đây là tổng quan nhanh về xu hướng Google cho máy học. Nói chung, học máy có thể được phân thành ba loại chính:
  • Học có giám sát
  • Học tập không giám sát
  • Học tăng cường

Học có giám sát

Học có giám sát là một hình thức học máy trong đó dữ liệu của chúng tôi đi kèm với một bộ nhãn hoặc biến mục tiêu là số. Các nhãn / danh mục này thường thuộc về một tính năng / thuộc tính, thường được gọi là biến mục tiêu. Chẳng hạn, mỗi hàng dữ liệu của bạn có thể thuộc danh mục Khỏe mạnh hoặc Không lành mạnh .
Đưa ra một tập hợp các tính năng như trọng lượng, lượng đường trong máu và tuổi tác, chúng ta có thể sử dụng thuật toán học máy có giám sát để dự đoán liệu người đó có khỏe mạnh hay không. Trong biểu thức toán học đơn giản sau đây, S là thuật toán học có giám sát, X là tập hợp các tính năng đầu vào, chẳng hạn như trọng lượng và tuổi và Y là biến mục tiêu có nhãn Healthy hoặc Not Healthy : Mặc dù học máy có giám sát là loại học máy phổ biến nhất được triển khai với scikit-learn và trong ngành, hầu hết các bộ dữ liệu thường không đi kèm với các nhãn được xác định trước. Các thuật toán học tập không giám sát trước tiên được sử dụng để phân cụm dữ liệu mà không có nhãn thành các nhóm riêng biệt mà sau đó chúng ta có thể gán nhãn. Điều này được thảo luận chi tiết trong phần sau.

Thuật toán học có giám sát

Các thuật toán học tập có giám sát có thể được sử dụng để giải quyết cả các vấn đề phân loại và hồi quy. Bạn sẽ học cách thực hiện một số thuật toán học máy được giám sát phổ biến nhất. Các thuật toán học máy được giám sát phổ biến là những thuật toán được sử dụng rộng rãi trong ngành công nghiệp và nghiên cứu và đã giúp chúng tôi giải quyết một loạt các vấn đề trên một loạt các lĩnh vực. Sau đây là một số thuật toán học có giám sát:

  • Hồi quy tuyến tính: Thuật toán học có giám sát này được sử dụng để dự đoán các kết quả số liên tục như giá nhà, giá cổ phiếu và nhiệt độ, để đặt tên cho một số.
  • Hồi quy logistic: Thuật toán học logistic là một thuật toán phân loại phổ biến được sử dụng đặc biệt trong ngành tín dụng để dự đoán các mặc định cho vay.
  • Hàng xóm gần nhất: Thuật toán k-NN là thuật toán phân loại được sử dụng để phân loại dữ liệu thành hai hoặc nhiều loại và được sử dụng rộng rãi để phân loại nhà thành các loại đắt tiền và giá cả phải chăng dựa trên giá, diện tích, phòng ngủ và toàn bộ phạm vi của các tính năng khác.
  • Hỗ trợ máy vectơ: Thuật toán SVM là một thuật toán phân loại phổ biến được sử dụng trong phát hiện hình ảnh và khuôn mặt, cùng với các ứng dụng như nhận dạng chữ viết tay.
  • Các thuật toán dựa trên cây : Các thuật toán dựa trên cây như cây quyết định, Rừng ngẫu nhiên và cây Boosted được sử dụng để giải quyết cả các vấn đề phân loại và hồi quy.
  • Naive Bayes: Trình phân loại Naive Bayes là một thuật toán học máy sử dụng mô hình toán học xác suất để giải các bài toán phân loại.

Học tập không giám sát

Học không giám sát là một hình thức học máy trong đó thuật toán cố gắng phát hiện / tìm các mẫu trong dữ liệu không có biến kết quả / mục tiêu. Nói cách khác, chúng tôi không có dữ liệu đi kèm với các nhãn có sẵn. Do đó, thuật toán thường sẽ sử dụng một số liệu như khoảng cách để nhóm dữ liệu với nhau tùy thuộc vào mức độ gần nhau. Như đã thảo luận trong phần trước, hầu hết dữ liệu bạn sẽ gặp trong thế giới thực sẽ không đi kèm với một bộ nhãn được xác định trước và, do đó, sẽ chỉ có một bộ các tính năng đầu vào mà không có thuộc tính đích. Trong biểu thức toán học đơn giản sau đây, U là thuật toán học tập không giám sát, trong khi X là tập hợp các tính năng đầu vào, chẳng hạn như trọng lượng và tuổi: Với dữ liệu này, mục tiêu của chúng tôi là tạo các nhóm có khả năng được gắn nhãn làKhỏe hay không khỏe . Thuật toán học tập không giám sát sẽ sử dụng một số liệu như khoảng cách để xác định khoảng cách gần nhau của một tập hợp điểm và hai nhóm như vậy cách nhau bao xa.

Thuật toán học tập không giám sát

Các thuật toán học máy không giám sát thường được sử dụng để phân cụm các điểm dữ liệu dựa trên khoảng cách. Thuật toán học tập không giám sát mà bạn sẽ học như sau:

  • k-mean: Thuật toán k-mean là thuật toán phổ biến thường được sử dụng để phân khúc khách hàng thành các danh mục duy nhất dựa trên nhiều tính năng khác nhau, chẳng hạn như thói quen chi tiêu của họ. Thuật toán này cũng được sử dụng để phân chia nhà ở thành các loại dựa trên các tính năng của chúng, chẳng hạn như giá cả và diện tích.

Học tăng cường

Học tăng cường là một lĩnh vực của Machine Learning. Gia cố. Đó là về việc thực hiện hành động phù hợp để tối đa hóa phần thưởng trong một tình huống cụ thể. Nó được sử dụng bởi các phần mềm và máy móc khác nhau để tìm ra hành vi hoặc con đường tốt nhất có thể trong một tình huống cụ thể. Học tăng cường khác với học có giám sát theo cách học có giám sát, dữ liệu huấn luyện có khóa trả lời, vì vậy mô hình được đào tạo với câu trả lời đúng trong khi học tăng cường, không có câu trả lời nào ngoài tác nhân củng cố quyết định phải làm gì để thực hiện nhiệm vụ nhất định. Trong trường hợp không có tập dữ liệu đào tạo, nó buộc phải học hỏi từ kinh nghiệm của nó.

Điều kiện tiên quyết cho việc học máy:

  1. Cách thiết lập Notebook Jupyter hoàn hảo để phân tích dữ liệu
  2. Gấu trúc trong Python để phân tích dữ liệu với ví dụ (hướng dẫn từng bước)
  3. Trực quan hóa dữ liệu

Làm thế nào chúng ta sẽ làm điều đó - Scikit-Learn

Scikit-learn là một phần mềm miễn phí và nguồn mở giúp bạn giải quyết các vấn đề máy học có giám sát và không giám sát. Phần mềm được xây dựng hoàn toàn bằng Python và sử dụng một số thư viện phổ biến nhất mà Python phải cung cấp, cụ thể là NumPy và SciPy. Lý do chính tại sao scikit-learn rất phổ biến bắt nguồn từ thực tế là hầu hết các thuật toán học máy phổ biến nhất thế giới có thể được triển khai khá nhanh trong định dạng plug and play một khi bạn biết đường ống lõi là gì. Một lý do khác là các thuật toán phổ biến để phân loại như hồi quy logistic và các máy vectơ hỗ trợ được viết bằng Cython. Cython được sử dụng để cung cấp cho các thuật toán này hiệu năng giống như C và do đó làm cho việc sử dụng scikit-learn khá hiệu quả trong quy trình.

Scikit-learn được thiết kế để giải quyết các vấn đề liên quan đến việc học có giám sát và không giám sát và không hỗ trợ học tập củng cố hiện nay.

Cài đặt gói Scikit-Learn

Có hai cách để bạn có thể cài đặt scikit-learn trên thiết bị cá nhân của mình:

  • Bằng cách sử dụng phương pháp pip
  • Bằng cách sử dụng phương pháp Anaconda

Phương pháp pip có thể được triển khai trên macOS / Linux Terminal hoặc Windows PowerShell, trong khi phương thức Anaconda sẽ hoạt động với dấu nhắc Anaconda. Lựa chọn giữa hai phương pháp cài đặt này khá đơn giản:

Phương pháp pip

pip3 install NumPy
pip3 install SciPy
pip3 install scikit-learn
pip3 install -U scikit-learn

Phương pháp Anaconda

conda install NumPy
conda install SciPy
conda install scikit-learn
conda install -U scikit-learn

Cho đến nay, bài học này đã tập trung vào phần giới thiệu ngắn gọn về việc học máy là gì đối với những bạn mới bắt đầu hành trình vào thế giới học máy. Bạn đã tìm hiểu về cách scikit-learn phù hợp với bối cảnh học máy và cách bạn có thể cài đặt phần mềm cần thiết.

Bây giờ, chúng tôi sẽ áp dụng điều này vào thực tế và thực hiện một số thăm dò và phân tích dữ liệu.

Bộ dữ liệu chúng ta sẽ xem xét trong phần này là bộ dữ liệu nhà ở Boston.

Tải dữ liệu vào Jupyter bằng DataFrame Pandas

Thông thường, dữ liệu được lưu trữ trong các bảng, có nghĩa là nó có thể được lưu dưới dạng tệp biến (CSV) được phân tách bằng dấu phẩy. Định dạng này và nhiều định dạng khác có thể được đọc vào Python dưới dạng đối tượng DataFrame, sử dụng thư viện Pandas. Các định dạng phổ biến khác bao gồm biến phân tách bằng tab (TSV), bảng SQL và cấu trúc dữ liệu JSON. Thật vậy, Pandas có hỗ trợ cho tất cả những điều này. Tuy nhiên, trong ví dụ này, chúng tôi sẽ không tải dữ liệu theo cách này vì bộ dữ liệu có sẵn trực tiếp thông qua scikit-learn.

Bộ dữ liệu nhà ở Boston có thể được truy cập từ mô-đun sklearn.datasets bằng phương pháp. tải_boston

from sklearn import datasets
boston = datasets.load_boston()
type(boston)

print(boston['DESCR'])

import pandas as pd

## Loading the data as Dataframe in pandas

df = pd.DataFrame(data=boston['data'], columns = boston['feature_names'])

#Checking our top 5 rows of the dataframe

df.head()
CRIM ZN ẤN ĐỘ CHAS NOX RM TUỔI TÁC DIS RAD THUẾ PTRATIO B LSTAT
0 0,00632 18,0 2,31 0,0 0,538 6.575 65,2 4.0900 1 296,0 15.3 396,90 4,98
1 0,02731 0,0 7,07 0,0 0.469 6.421 78,9 4.9671 2.0 242,0 17.8 396,90 9,14
2 0,02729 0,0 7,07 0,0 0.469 7.185 61.1 4.9671 2.0 242,0 17.8 392.83 4.03
3 0,03237 0,0 2,18 0,0 0,458 6,998 45,8 6.0622 3.0 222,0 18,7 394,63 2,94
4 0,06905 0,0 2,18 0,0 0,458 7.147 54,2 6.0622 3.0 222,0 18,7 396,90 5,33

Trong học máy, biến đang được mô hình hóa được gọi là biến đích; đó là những gì bạn đang cố gắng dự đoán với các tính năng. Đối với tập dữ liệu này, mục tiêu được đề xuất là MEDV, giá trị nhà trung bình tính bằng 1.000 đô la.

## Adding Target temp Column to our dataframe
df['MEDV'] = boston['target']


## Creating copy of the target Value
y = df['MEDV'].copy()

##Deleting the Newly created column
del df['MEDV']


## Concat the target columns to our existing dataframe
df = pd.concat((y, df), axis=1)
MEDV CRIM ZN ẤN ĐỘ CHAS NOX RM TUỔI TÁC DIS RAD THUẾ PTRATIO B LSTAT
0 24.0 0,00632 18,0 2,31 0,0 0,538 6.575 65,2 4.0900 1 296,0 15.3 396,9 4,98
1 21,6 0,02731 0,0 7,07 0,0 0.469 6.421 78,9 4.9671 2.0 242,0 17.8 396,9 9,14

Ở đây, chúng tôi giới thiệu một biến giả y để giữ một bản sao của cột mục tiêu trước khi xóa nó khỏi DataFrame. Sau đó, chúng tôi sử dụng hàm ghép nối Pandas để kết hợp nó với DataFrame còn lại dọc theo trục thứ 1 (trái ngược với trục 0, kết hợp các hàng).

print(df.shape)

df.isnull().sum()
---------------------
(506, 14)

MEDV       0
CRIM       0
ZN         0
INDUS      0
CHAS       0
NOX        0
RM         0
AGE        0
DIS        0
RAD        0
TAX        0
PTRATIO    0
B          0
LSTAT      0
dtype: int64

Đối với tập dữ liệu này, chúng tôi thấy không có NaN, điều đó có nghĩa là chúng tôi không có việc gì ngay lập tức để làm sạch dữ liệu và có thể tiếp tục.

Để đơn giản hóa việc phân tích, điều cuối cùng chúng ta sẽ làm trước khi khám phá là loại bỏ một số cột. Chúng tôi sẽ không bận tâm đến những điều này và thay vào đó tập trung vào phần còn lại chi tiết hơn.

Xóa một số cột bằng cách chạy ô chứa mã sau:

for col in ['ZN', 'NOX', 'RAD', 'PTRATIO', 'B']:
    del df[col]

Thăm dò dữ liệu

Vì đây là bộ dữ liệu hoàn toàn mới mà chúng tôi chưa từng thấy trước đây, mục tiêu đầu tiên ở đây là tìm hiểu dữ liệu. Chúng ta đã thấy mô tả văn bản của dữ liệu, điều này rất quan trọng đối với sự hiểu biết định tính. Bây giờ chúng ta sẽ tính toán một mô tả định lượng.

df.describe().T
đếm nghĩa là tiêu chuẩn tối thiểu 25% 50% 75% tối đa
MEDV 506,0 22.532806 9.197104 5,00000 17.025000 21.20000 25.000000 50.0000
CRIM 506,0 3.613524 8.601545 0,00632 0,082045 0,25651 3.677083 88.9762
ẤN ĐỘ 506,0 11.136779 6.860353 0,46000 5.190000 9,69000 18.100000 27.7400
CHAS 506,0 0,069170 0,253994 0,00000 0,000000 0,00000 0,000000 1,0000
RM 506,0 6.284634 0,702617 3.56100 5,885500 6,20850 6,623500 8.7800
TUỔI TÁC 506,0 68,574901 28.148861 2.90000 45.025000 77.50000 94.075000 100.0000
DIS 506,0 3.795043 2.105710 1.12960 2.100175 3.20745 5.188425 12.1265
THUẾ 506,0 408.237154 168.537116 187,00000 279.000000 330.00000 666.000000 711.0000
LSTAT 506,0 12,653063 7.141062 1,73000 6,950000 11,36000 16.955000

37.9700

Điều này tính toán các thuộc tính khác nhau bao gồm giá trị trung bình, độ lệch chuẩn, tối thiểu và tối đa cho mỗi cột. Bảng này đưa ra một ý tưởng cấp cao về cách mọi thứ được phân phối. Lưu ý rằng chúng tôi đã thực hiện chuyển đổi kết quả bằng cách thêm .T vào đầu ra; Điều này hoán đổi các hàng và cột.

cols = ['RM', 'AGE', 'TAX', 'LSTAT', 'MEDV'] 

df[cols].corr()

import matplotlib.pyplot as plt 

import seaborn as sns 
%matplotlib inline 
ax = sns.heatmap(df[cols].corr(), 
                 cmap=sns.cubehelix_palette(20, light=0.95, dark=0.15))
ax.xaxis.tick_top() # move labels to the top

Chúng tôi gọi sns.heatmap và truyền ma trận tương quan cặp làm đầu vào. Chúng tôi sử dụng bảng màu tùy chỉnh ở đây để ghi đè mặc định Seaborn.

Bảng kết quả này cho thấy điểm tương quan giữa mỗi bộ giá trị. Điểm số dương lớn cho thấy mối tương quan tích cực mạnh (nghĩa là cùng hướng). Như mong đợi, chúng ta thấy các giá trị tối đa là 1 trên đường chéo.

Hệ số Pearson được định nghĩa là hiệp phương sai giữa hai biến, chia cho tích của độ lệch chuẩn của chúng:

Hiệp phương sai, lần lượt, được định nghĩa như sau:

Ở đây, n là số lượng mẫu, xi và yi là các mẫu riêng lẻ được tính tổng và Xbar và Ybar là phương tiện của mỗi bộ.

Mô hình tuyến tính với Scikit-Learn

Chúng ta có thể thấy rằng nó đưa ra một vấn đề hồi quy trong đó chúng ta dự đoán một biến mục tiêu liên tục được cung cấp một tập hợp các tính năng. Cụ thể, chúng tôi sẽ dự đoán giá trị nhà trung bình (MEDV). Chúng tôi sẽ đào tạo các mô hình chỉ lấy một tính năng làm đầu vào để đưa ra dự đoán này. Theo cách này, các mô hình sẽ đơn giản về mặt khái niệm để hiểu và chúng ta có thể tập trung nhiều hơn vào các chi tiết kỹ thuật của API scikit-learn.

Chúng ta sẽ nhập  LinearRegression lớp và xây dựng mô hình phân loại tuyến tính giống như trước đây khi chúng ta tính toán MSE. Chạy như sau:

Sử dụng scikit-learn để phù hợp với mô hình hồi quy đa thức để dự đoán giá trị nhà trung bình (MEDV), với các giá trị LSTAT. Chúng tôi hy vọng xây dựng một mô hình có lỗi bình phương trung bình (MSE) thấp hơn

y = df['MEDV'].values

x = df['LSTAT'].values.reshape(-1,1)


from sklearn.preprocessing import PolynomialFeatures

poly = PolynomialFeatures(degree=3)

x_poly = poly.fit_transform(x)



from sklearn.linear_model import LinearRegression

clf = LinearRegression()

clf.fit(x_poly, y)


y_pred = clf.predict(x_poly)

resid_MEDV = y - y_pred


from sklearn.metrics import mean_squared_error

error = mean_squared_error(y, y_pred)

print('mse = {:.2f}'.format(error))

fig, ax = plt.subplots()
# Plot the samples
ax.scatter(x.flatten(), y, alpha=0.6)
# Plot the polynomial model
x_ = np.linspace(2, 38, 50).reshape(-1, 1)
x_poly = poly.fit_transform(x_)
y_ = clf.predict(x_poly)
ax.plot(x_, y_, color='red', alpha=0.8)
ax.set_xlabel('LSTAT'); ax.set_ylabel('MEDV');
--------------------------------------
mse = 28.88

Điều này hoàn thành hướng dẫn mở rộng để hiểu cách viết mô hình học máy đầu tiên của bạn. Ở đây, chúng tôi đã sử dụng các hỗ trợ trực quan, chẳng hạn như các biểu đồ phân tán, để hiểu sâu hơn về dữ liệu của chúng tôi. Chúng tôi cũng thực hiện mô hình dự đoán đơn giản. Trong phần tiếp theo, chúng ta sẽ xem xét MSE / RMSE là gì và làm việc với các mô hình khác để nâng cao độ chính xác. Hy vọng bạn thích nó! Hãy cho tôi biết suy nghĩ của bạn trong phần bình luận.

Hữu ích 8 Chia sẻ Viết bình luận 0
Đã xem 3276