Scikit Learn - Quá trình mô hình hóa
Chương này đề cập đến quá trình mô hình hóa liên quan đến Sklearn. Hãy để chúng tôi hiểu chi tiết về điều tương tự và bắt đầu với việc tải tập dữ liệu.
Đang tải tập dữ liệu
Tập hợp dữ liệu được gọi là tập dữ liệu. Nó có hai thành phần sau:
Features- Các biến của dữ liệu được gọi là các đặc trưng của nó. Chúng còn được gọi là các yếu tố dự đoán, đầu vào hoặc thuộc tính.
Feature matrix - Nó là tập hợp các tính năng, trong trường hợp có nhiều hơn một.
Feature Names - Đây là danh sách tất cả các tên của các đối tượng địa lý.
Response- Biến đầu ra về cơ bản phụ thuộc vào các biến đặc trưng. Chúng còn được gọi là mục tiêu, nhãn hoặc đầu ra.
Response Vector- Nó được sử dụng để biểu diễn cột phản hồi. Nói chung, chúng tôi chỉ có một cột phản hồi.
Target Names - Nó đại diện cho các giá trị có thể được thực hiện bởi một vectơ phản hồi.
Scikit-learning có một số bộ dữ liệu mẫu như iris và digits để phân loại và Boston house prices để hồi quy.
Thí dụ
Sau đây là một ví dụ để tải iris tập dữ liệu -
from sklearn.datasets import load_iris
iris = load_iris()
X = iris.data
y = iris.target
feature_names = iris.feature_names
target_names = iris.target_names
print("Feature names:", feature_names)
print("Target names:", target_names)
print("\nFirst 10 rows of X:\n", X[:10])
Đầu ra
Feature names: ['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']
Target names: ['setosa' 'versicolor' 'virginica']
First 10 rows of X:
[
[5.1 3.5 1.4 0.2]
[4.9 3. 1.4 0.2]
[4.7 3.2 1.3 0.2]
[4.6 3.1 1.5 0.2]
[5. 3.6 1.4 0.2]
[5.4 3.9 1.7 0.4]
[4.6 3.4 1.4 0.3]
[5. 3.4 1.5 0.2]
[4.4 2.9 1.4 0.2]
[4.9 3.1 1.5 0.1]
]
Tách tập dữ liệu
Để kiểm tra độ chính xác của mô hình của chúng tôi, chúng tôi có thể chia tập dữ liệu thành hai phần-a training set và a testing set. Sử dụng tập huấn luyện để huấn luyện mô hình và tập thử nghiệm để kiểm tra mô hình. Sau đó, chúng tôi có thể đánh giá mô hình của chúng tôi đã hoạt động tốt như thế nào.
Thí dụ
Ví dụ sau sẽ chia dữ liệu thành tỷ lệ 70:30, tức là 70% dữ liệu sẽ được sử dụng làm dữ liệu đào tạo và 30% sẽ được sử dụng làm dữ liệu thử nghiệm. Tập dữ liệu là tập dữ liệu mống mắt như trong ví dụ trên.
from sklearn.datasets import load_iris
iris = load_iris()
X = iris.data
y = iris.target
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size = 0.3, random_state = 1
)
print(X_train.shape)
print(X_test.shape)
print(y_train.shape)
print(y_test.shape)
Đầu ra
(105, 4)
(45, 4)
(105,)
(45,)
Như đã thấy trong ví dụ trên, nó sử dụng train_test_split()chức năng của scikit-learning để chia nhỏ tập dữ liệu. Hàm này có các đối số sau:
X, y - Đây, X là feature matrix và y là response vector, cần được chia nhỏ.
test_size- Điều này thể hiện tỷ lệ của dữ liệu thử nghiệm trên tổng dữ liệu đã cho. Như trong ví dụ trên, chúng tôi đang thiết lậptest_data = 0.3 cho 150 hàng X. Nó sẽ tạo ra dữ liệu thử nghiệm là 150 * 0,3 = 45 hàng.
random_size- Nó được sử dụng để đảm bảo rằng sự phân chia sẽ luôn giống nhau. Điều này hữu ích trong những trường hợp bạn muốn có kết quả có thể lặp lại.
Đào tạo người mẫu
Tiếp theo, chúng ta có thể sử dụng tập dữ liệu của mình để đào tạo một số mô hình dự đoán. Như đã thảo luận, scikit-learning có nhiều loạiMachine Learning (ML) algorithms có giao diện nhất quán để lắp, dự đoán độ chính xác, thu hồi, v.v.
Thí dụ
Trong ví dụ dưới đây, chúng ta sẽ sử dụng bộ phân loại KNN (K hàng xóm gần nhất). Đừng đi vào chi tiết của các thuật toán KNN, vì sẽ có một chương riêng cho điều đó. Ví dụ này được sử dụng để giúp bạn chỉ hiểu phần triển khai.
from sklearn.datasets import load_iris
iris = load_iris()
X = iris.data
y = iris.target
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size = 0.4, random_state=1
)
from sklearn.neighbors import KNeighborsClassifier
from sklearn import metrics
classifier_knn = KNeighborsClassifier(n_neighbors = 3)
classifier_knn.fit(X_train, y_train)
y_pred = classifier_knn.predict(X_test)
# Finding accuracy by comparing actual response values(y_test)with predicted response value(y_pred)
print("Accuracy:", metrics.accuracy_score(y_test, y_pred))
# Providing sample data and the model will make prediction out of that data
sample = [[5, 5, 3, 2], [2, 4, 3, 5]]
preds = classifier_knn.predict(sample)
pred_species = [iris.target_names[p] for p in preds] print("Predictions:", pred_species)
Đầu ra
Accuracy: 0.9833333333333333
Predictions: ['versicolor', 'virginica']
Độ bền của mô hình
Sau khi bạn đào tạo mô hình, bạn nên duy trì mô hình đó để sử dụng trong tương lai để chúng ta không cần phải đào tạo lại nó nhiều lần. Nó có thể được thực hiện với sự giúp đỡ củadump và load tính năng của joblib gói hàng.
Hãy xem xét ví dụ dưới đây, trong đó chúng tôi sẽ lưu mô hình được đào tạo ở trên (classifier_knn) để sử dụng trong tương lai -
from sklearn.externals import joblib
joblib.dump(classifier_knn, 'iris_classifier_knn.joblib')
Đoạn mã trên sẽ lưu mô hình vào tệp có tên iris_classifier_knn.joblib. Bây giờ, đối tượng có thể được tải lại từ tệp với sự trợ giúp của mã sau:
joblib.load('iris_classifier_knn.joblib')
Xử lý trước dữ liệu
Vì chúng ta đang xử lý nhiều dữ liệu và dữ liệu đó ở dạng thô, trước khi nhập dữ liệu đó vào các thuật toán học máy, chúng ta cần chuyển đổi nó thành dữ liệu có ý nghĩa. Quá trình này được gọi là tiền xử lý dữ liệu. Scikit-learning có gói có tênpreprocessingvì mục đích này. Cácpreprocessing gói có các kỹ thuật sau:
Binarisation
Kỹ thuật tiền xử lý này được sử dụng khi chúng ta cần chuyển đổi các giá trị số thành các giá trị Boolean.
Thí dụ
import numpy as np
from sklearn import preprocessing
Input_data = np.array(
[2.1, -1.9, 5.5],
[-1.5, 2.4, 3.5],
[0.5, -7.9, 5.6],
[5.9, 2.3, -5.8]]
)
data_binarized = preprocessing.Binarizer(threshold=0.5).transform(input_data)
print("\nBinarized data:\n", data_binarized)
Trong ví dụ trên, chúng tôi đã sử dụng threshold value = 0,5 và đó là lý do tại sao, tất cả các giá trị trên 0,5 sẽ được chuyển đổi thành 1 và tất cả các giá trị dưới 0,5 sẽ được chuyển thành 0.
Đầu ra
Binarized data:
[
[ 1. 0. 1.]
[ 0. 1. 1.]
[ 0. 0. 1.]
[ 1. 1. 0.]
]
Loại bỏ trung bình
Kỹ thuật này được sử dụng để loại bỏ giá trị trung bình khỏi vectơ đặc trưng để mọi đối tượng đều có tâm là 0.
Thí dụ
import numpy as np
from sklearn import preprocessing
Input_data = np.array(
[2.1, -1.9, 5.5],
[-1.5, 2.4, 3.5],
[0.5, -7.9, 5.6],
[5.9, 2.3, -5.8]]
)
#displaying the mean and the standard deviation of the input data
print("Mean =", input_data.mean(axis=0))
print("Stddeviation = ", input_data.std(axis=0))
#Removing the mean and the standard deviation of the input data
data_scaled = preprocessing.scale(input_data)
print("Mean_removed =", data_scaled.mean(axis=0))
print("Stddeviation_removed =", data_scaled.std(axis=0))
Đầu ra
Mean = [ 1.75 -1.275 2.2 ]
Stddeviation = [ 2.71431391 4.20022321 4.69414529]
Mean_removed = [ 1.11022302e-16 0.00000000e+00 0.00000000e+00]
Stddeviation_removed = [ 1. 1. 1.]
Mở rộng quy mô
Chúng tôi sử dụng kỹ thuật tiền xử lý này để chia tỷ lệ các vectơ đặc trưng. Tỷ lệ của vectơ đối tượng là rất quan trọng, bởi vì các đối tượng địa lý không được tổng hợp lớn hoặc nhỏ.
Thí dụ
import numpy as np
from sklearn import preprocessing
Input_data = np.array(
[
[2.1, -1.9, 5.5],
[-1.5, 2.4, 3.5],
[0.5, -7.9, 5.6],
[5.9, 2.3, -5.8]
]
)
data_scaler_minmax = preprocessing.MinMaxScaler(feature_range=(0,1))
data_scaled_minmax = data_scaler_minmax.fit_transform(input_data)
print ("\nMin max scaled data:\n", data_scaled_minmax)
Đầu ra
Min max scaled data:
[
[ 0.48648649 0.58252427 0.99122807]
[ 0. 1. 0.81578947]
[ 0.27027027 0. 1. ]
[ 1. 0.99029126 0. ]
]
Bình thường hóa
Chúng tôi sử dụng kỹ thuật tiền xử lý này để sửa đổi các vectơ đặc trưng. Chuẩn hóa các vectơ đặc trưng là cần thiết để các vectơ đặc trưng có thể được đo lường ở quy mô chung. Có hai loại chuẩn hóa như sau:
Chuẩn hóa L1
Nó còn được gọi là Sai lệch tuyệt đối ít nhất. Nó sửa đổi giá trị theo cách mà tổng các giá trị tuyệt đối luôn luôn tối đa 1 trong mỗi hàng. Ví dụ sau cho thấy việc thực hiện chuẩn hóa L1 trên dữ liệu đầu vào.
Thí dụ
import numpy as np
from sklearn import preprocessing
Input_data = np.array(
[
[2.1, -1.9, 5.5],
[-1.5, 2.4, 3.5],
[0.5, -7.9, 5.6],
[5.9, 2.3, -5.8]
]
)
data_normalized_l1 = preprocessing.normalize(input_data, norm='l1')
print("\nL1 normalized data:\n", data_normalized_l1)
Đầu ra
L1 normalized data:
[
[ 0.22105263 -0.2 0.57894737]
[-0.2027027 0.32432432 0.47297297]
[ 0.03571429 -0.56428571 0.4 ]
[ 0.42142857 0.16428571 -0.41428571]
]
Chuẩn hóa L2
Còn được gọi là Hình vuông nhỏ nhất. Nó sửa đổi giá trị theo cách mà tổng các ô vuông luôn luôn tối đa 1 trong mỗi hàng. Ví dụ sau cho thấy việc thực hiện chuẩn hóa L2 trên dữ liệu đầu vào.
Thí dụ
import numpy as np
from sklearn import preprocessing
Input_data = np.array(
[
[2.1, -1.9, 5.5],
[-1.5, 2.4, 3.5],
[0.5, -7.9, 5.6],
[5.9, 2.3, -5.8]
]
)
data_normalized_l2 = preprocessing.normalize(input_data, norm='l2')
print("\nL1 normalized data:\n", data_normalized_l2)
Đầu ra
L2 normalized data:
[
[ 0.33946114 -0.30713151 0.88906489]
[-0.33325106 0.53320169 0.7775858 ]
[ 0.05156558 -0.81473612 0.57753446]
[ 0.68706914 0.26784051 -0.6754239 ]
]