Hướng dẫn apply model to data python - áp dụng mô hình cho Python dữ liệu

3.6. Scikit-learn: Học máy ở Python¶

Tác giả: Gael Varoquaux: Gael Varoquaux

Show

Hướng dẫn apply model to data python - áp dụng mô hình cho Python dữ liệu

3.6.1. Giới thiệu: Cài đặt vấn đề

3.6.1.1. Học máy là gì? ¶

Mẹo

Học máy là về việc xây dựng các chương trình với các tham số có thể điều chỉnh được điều chỉnh tự động để cải thiện hành vi của chúng bằng cách thích ứng với dữ liệu đã thấy trước đó.tunable parameters that are adjusted automatically so as to improve their behavior by adapting to previously seen data.

Học máy có thể được coi là một trường con của trí tuệ nhân tạo vì các thuật toán đó có thể được coi là các khối xây dựng để làm cho máy tính học cách hành xử thông minh hơn bằng cách nào đó khái quát thay vì chỉ lưu trữ và truy xuất các mục dữ liệu như hệ thống cơ sở dữ liệu sẽ làm.Artificial Intelligence since those algorithms can be seen as building blocks to make computers learn to behave more intelligently by somehow generalizing rather that just storing and retrieving data items like a database system would do.

Hướng dẫn apply model to data python - áp dụng mô hình cho Python dữ liệu

Một vấn đề phân loại

Chúng tôi sẽ xem xét hai nhiệm vụ học máy rất đơn giản ở đây. Đầu tiên là một nhiệm vụ phân loại: hình hiển thị một tập hợp dữ liệu hai chiều, được tô màu theo hai nhãn lớp khác nhau. Một thuật toán phân loại có thể được sử dụng để vẽ một ranh giới phân chia giữa hai cụm điểm:classification task: the figure shows a collection of two-dimensional data, colored according to two different class labels. A classification algorithm may be used to draw a dividing boundary between the two clusters of points:

Bằng cách vẽ đường phân tách này, chúng tôi đã học được một mô hình có thể khái quát vào dữ liệu mới: nếu bạn thả một điểm khác xuống máy bay không được gắn nhãn, thuật toán này giờ đây có thể dự đoán nó là một điểm màu xanh hay màu đỏ.generalize to new data: if you were to drop another point onto the plane which is unlabeled, this algorithm could now predict whether it’s a blue or a red point.

Hướng dẫn apply model to data python - áp dụng mô hình cho Python dữ liệu

Một vấn đề hồi quy

Nhiệm vụ đơn giản tiếp theo mà chúng tôi sẽ xem xét là một nhiệm vụ hồi quy: một dòng phù hợp nhất với một tập hợp dữ liệu.regression task: a simple best-fit line to a set of data.

Một lần nữa, đây là một ví dụ về việc lắp mô hình vào dữ liệu, nhưng trọng tâm của chúng tôi ở đây là mô hình có thể đưa ra các khái quát về dữ liệu mới. Mô hình đã được học từ dữ liệu đào tạo và có thể được sử dụng để dự đoán kết quả của dữ liệu thử nghiệm: ở đây, chúng tôi có thể được cung cấp giá trị X và mô hình sẽ cho phép chúng tôi dự đoán giá trị y.learned from the training data, and can be used to predict the result of test data: here, we might be given an x-value, and the model would allow us to predict the y value.

3.6.1.2. Dữ liệu trong Scikit-Learn¶

Ma trận dữ liệu

Các thuật toán học máy được triển khai trong Scikit-LEARN Dữ liệu dự kiến ​​sẽ được lưu trữ trong một mảng hoặc ma trận hai chiều. Các mảng có thể là mảng

>>> model.coef_
array([1.])
4 hoặc trong một số trường hợp
>>> model.coef_
array([1.])
5 ma trận. Kích thước của mảng dự kiến ​​là
>>> model.coef_
array([1.])
6two-dimensional array or matrix. The arrays can be either
>>> model.coef_
array([1.])
4 arrays, or in some cases
>>> model.coef_
array([1.])
5 matrices. The size of the array is expected to be
>>> model.coef_
array([1.])
6

  • N_Samples: Số lượng mẫu: Mỗi mẫu là một mục để xử lý (ví dụ: phân loại). Một mẫu có thể là một tài liệu, hình ảnh, âm thanh, video, đối tượng thiên văn, một hàng trong cơ sở dữ liệu hoặc tệp CSV hoặc bất cứ điều gì bạn có thể mô tả với một tập hợp các đặc điểm định lượng cố định. The number of samples: each sample is an item to process (e.g. classify). A sample can be a document, a picture, a sound, a video, an astronomical object, a row in database or CSV file, or whatever you can describe with a fixed set of quantitative traits.
  • N_Features: Số lượng các tính năng hoặc các đặc điểm riêng biệt có thể được sử dụng để mô tả từng mục theo cách định lượng. Các tính năng thường có giá trị thực, nhưng có thể là boolean hoặc có giá trị riêng biệt trong một số trường hợp. The number of features or distinct traits that can be used to describe each item in a quantitative manner. Features are generally real-valued, but may be boolean or discrete-valued in some cases.

Mẹo

Học máy là về việc xây dựng các chương trình với các tham số có thể điều chỉnh được điều chỉnh tự động để cải thiện hành vi của chúng bằng cách thích ứng với dữ liệu đã thấy trước đó.

Học máy có thể được coi là một trường con của trí tuệ nhân tạo vì các thuật toán đó có thể được coi là các khối xây dựng để làm cho máy tính học cách hành xử thông minh hơn bằng cách nào đó khái quát thay vì chỉ lưu trữ và truy xuất các mục dữ liệu như hệ thống cơ sở dữ liệu sẽ làm.

Một vấn đề phân loại

Chúng tôi sẽ xem xét hai nhiệm vụ học máy rất đơn giản ở đây. Đầu tiên là một nhiệm vụ phân loại: hình hiển thị một tập hợp dữ liệu hai chiều, được tô màu theo hai nhãn lớp khác nhau. Một thuật toán phân loại có thể được sử dụng để vẽ một ranh giới phân chia giữa hai cụm điểm:

Hướng dẫn apply model to data python - áp dụng mô hình cho Python dữ liệu
Hướng dẫn apply model to data python - áp dụng mô hình cho Python dữ liệu
Hướng dẫn apply model to data python - áp dụng mô hình cho Python dữ liệu
Bằng cách vẽ đường phân tách này, chúng tôi đã học được một mô hình có thể khái quát vào dữ liệu mới: nếu bạn thả một điểm khác xuống máy bay không được gắn nhãn, thuật toán này giờ đây có thể dự đoán nó là một điểm màu xanh hay màu đỏ.Một vấn đề hồi quyNhiệm vụ đơn giản tiếp theo mà chúng tôi sẽ xem xét là một nhiệm vụ hồi quy: một dòng phù hợp nhất với một tập hợp dữ liệu.

Một lần nữa, đây là một ví dụ về việc lắp mô hình vào dữ liệu, nhưng trọng tâm của chúng tôi ở đây là mô hình có thể đưa ra các khái quát về dữ liệu mới. Mô hình đã được học từ dữ liệu đào tạo và có thể được sử dụng để dự đoán kết quả của dữ liệu thử nghiệm: ở đây, chúng tôi có thể được cung cấp giá trị X và mô hình sẽ cho phép chúng tôi dự đoán giá trị y.

3.6.1.2. Dữ liệu trong Scikit-Learn¶

Ma trận dữ liệu

  • Các thuật toán học máy được triển khai trong Scikit-LEARN Dữ liệu dự kiến ​​sẽ được lưu trữ trong một mảng hoặc ma trận hai chiều. Các mảng có thể là mảng
    >>> model.coef_
    array([1.])
    
    4 hoặc trong một số trường hợp
    >>> model.coef_
    array([1.])
    
    5 ma trận. Kích thước của mảng dự kiến ​​là
    >>> model.coef_
    array([1.])
    
    6
  • N_Samples: Số lượng mẫu: Mỗi mẫu là một mục để xử lý (ví dụ: phân loại). Một mẫu có thể là một tài liệu, hình ảnh, âm thanh, video, đối tượng thiên văn, một hàng trong cơ sở dữ liệu hoặc tệp CSV hoặc bất cứ điều gì bạn có thể mô tả với một tập hợp các đặc điểm định lượng cố định.

N_Features: Số lượng các tính năng hoặc các đặc điểm riêng biệt có thể được sử dụng để mô tả từng mục theo cách định lượng. Các tính năng thường có giá trị thực, nhưng có thể là boolean hoặc có giá trị riêng biệt trong một số trường hợp.fixed number of features for each sample, and feature number

from sklearn import neighbors, datasets
iris = datasets.load_iris()
X, y = iris.data, iris.target
knn = neighbors.KNeighborsClassifier(n_neighbors=1)
knn.fit(X, y)
# What kind of iris has 3cm x 5cm sepal and 4cm x 2cm petal?
print(iris.target_names[knn.predict([[3, 5, 4, 2]])])
1 must be a similar kind of quantity for each sample.

Số lượng các tính năng phải được cố định trước. Tuy nhiên, nó có thể là kích thước rất cao (ví dụ: hàng triệu tính năng) với hầu hết chúng là số không cho một mẫu nhất định. Đây là một trường hợp mà ma trận
>>> model.coef_
array([1.])
5 có thể hữu ích, ở chỗ chúng có hiệu quả hơn nhiều so với các mảng numpy.

Một ví dụ đơn giản: Bộ dữ liệu Iris

  • Vấn đề ứng dụng
    • Như một ví dụ về một bộ dữ liệu đơn giản, chúng ta hãy xem dữ liệu IRIS do Scikit-Learn lưu trữ. Giả sử chúng ta muốn nhận ra các loài tròng mắt. Dữ liệu bao gồm các phép đo của ba loài tròng mắt khác nhau:
    • Setosa iris
    • Verscolor Iris
    • Virginica Iris
  • Câu hỏi nhanh:
    • Nếu chúng ta muốn thiết kế một thuật toán để nhận ra các loài IRIS, dữ liệu có thể là gì?
    • Hãy nhớ rằng: Chúng tôi cần một mảng 2D có kích thước
      >>> model.coef_
      array([1.])
      
      8.
    • >>> model.coef_
      array([1.])
      
      9 sẽ đề cập đến điều gì?

from sklearn import neighbors, datasets
iris = datasets.load_iris()
X, y = iris.data, iris.target
knn = neighbors.KNeighborsClassifier(n_neighbors=1)
knn.fit(X, y)
# What kind of iris has 3cm x 5cm sepal and 4cm x 2cm petal?
print(iris.target_names[knn.predict([[3, 5, 4, 2]])])
0 có thể đề cập đến điều gì?

>>> from sklearn.datasets import load_iris
>>> iris = load_iris()

Hãy nhớ rằng phải có một số lượng tính năng cố định cho mỗi mẫu và số tính năng

from sklearn import neighbors, datasets
iris = datasets.load_iris()
X, y = iris.data, iris.target
knn = neighbors.KNeighborsClassifier(n_neighbors=1)
knn.fit(X, y)
# What kind of iris has 3cm x 5cm sepal and 4cm x 2cm petal?
print(iris.target_names[knn.predict([[3, 5, 4, 2]])])
1 phải là một loại tương tự cho mỗi mẫu.

Đang tải dữ liệu mống mắt với scikit-learn¶ Note that scikit-learn is imported as

from sklearn import neighbors, datasets
iris = datasets.load_iris()
X, y = iris.data, iris.target
knn = neighbors.KNeighborsClassifier(n_neighbors=1)
knn.fit(X, y)
# What kind of iris has 3cm x 5cm sepal and 4cm x 2cm petal?
print(iris.target_names[knn.predict([[3, 5, 4, 2]])])
3

Scikit-learn có một bộ dữ liệu rất đơn giản về các loài mống mắt này. Dữ liệu bao gồm các mục sau:

>>> print(iris.data.shape)
(150, 4)
>>> n_samples, n_features = iris.data.shape
>>> print(n_samples)
150
>>> print(n_features)
4
>>> print(iris.data[0])
[5.1  3.5  1.4  0.2]

Các tính năng trong bộ dữ liệu IRIS:

>>> print(iris.target.shape)
(150,)
>>> print(iris.target)
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2
 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 2 2]

chiều dài sepal (cm)

>>> print(iris.target_names)
['setosa' 'versicolor' 'virginica']

chiều rộng sepal (cm)

Hướng dẫn apply model to data python - áp dụng mô hình cho Python dữ liệu

Exercise::

Chiều dài cánh hoa (cm)

chiều rộng cánh hoa (cm): click on the figure above to see the code that generates it, and modify this code.

Các lớp mục tiêu để dự đoán:

Setosa

Mọi thuật toán đều được phơi bày trong Scikit-learn thông qua đối tượng ’ước tính. Ví dụ, hồi quy tuyến tính là:

from sklearn import neighbors, datasets
iris = datasets.load_iris()
X, y = iris.data, iris.target
knn = neighbors.KNeighborsClassifier(n_neighbors=1)
knn.fit(X, y)
# What kind of iris has 3cm x 5cm sepal and 4cm x 2cm petal?
print(iris.target_names[knn.predict([[3, 5, 4, 2]])])
7

>>> from sklearn.linear_model import LinearRegression

Các tham số ước tính: Tất cả các tham số của công cụ ước tính có thể được đặt khi nó được khởi tạo:: All the parameters of an estimator can be set when it is instantiated:

>>> model = LinearRegression(n_jobs=1, normalize=True)
>>> print(model.normalize)
True
>>> print(model)
LinearRegression(n_jobs=1, normalize=True)

Phù hợp với dữ liệu lor

Hãy để tạo ra một số dữ liệu đơn giản với Numpy:numpy:

>>> import numpy as np
>>> x = np.array([0, 1, 2])
>>> y = np.array([0, 1, 2])

>>> X = x[:, np.newaxis] # The input data for sklearn is 2D: (samples == 3 x features == 1)
>>> X
array([[0],
       [1],
       [2]])

>>> model.fit(X, y)
LinearRegression(n_jobs=1, normalize=True)

Các tham số ước tính: Khi dữ liệu được trang bị công cụ ước tính, các tham số được ước tính từ dữ liệu trong tay. Tất cả các tham số ước tính là các thuộc tính của đối tượng ước tính kết thúc bằng một dấu gạch dưới:: When data is fitted with an estimator, parameters are estimated from the data at hand. All the estimated parameters are attributes of the estimator object ending by an underscore:

>>> model.coef_
array([1.])

3.6.2.2. Học tập có giám sát: Phân loại và hồi quy Or

Trong học tập có giám sát, chúng tôi có một bộ dữ liệu bao gồm cả hai tính năng và nhãn. Nhiệm vụ là xây dựng một công cụ ước tính có thể dự đoán nhãn của một đối tượng được đưa ra tập hợp các tính năng. Một ví dụ tương đối đơn giản là dự đoán các loài mống mắt được đưa ra một tập hợp các phép đo hoa của nó. Đây là một nhiệm vụ tương đối đơn giản. Một số ví dụ phức tạp hơn là:Supervised Learning, we have a dataset consisting of both features and labels. The task is to construct an estimator which is able to predict the label of an object given the set of features. A relatively simple example is predicting the species of iris given a set of measurements of its flower. This is a relatively simple task. Some more complicated examples are:

  • Đưa ra một hình ảnh nhiều màu của một vật thể qua kính viễn vọng, xác định xem đối tượng đó có phải là ngôi sao, quasar hay thiên hà hay không.
  • Đưa ra một bức ảnh của một người, hãy xác định người trong ảnh.
  • Đưa ra một danh sách các bộ phim mà một người đã xem và xếp hạng cá nhân của họ về bộ phim, đề xuất một danh sách các bộ phim họ muốn (cái gọi là Hệ thống đề xuất: Một ví dụ nổi tiếng là Giải thưởng Netflix).

Mẹo

Những gì các nhiệm vụ này có điểm chung là có một hoặc nhiều số lượng chưa biết liên quan đến đối tượng cần được xác định từ các số lượng quan sát khác.

Học tập được giám sát được chia thành hai loại, phân loại và hồi quy. Trong phân loại, nhãn là rời rạc, trong khi hồi quy, nhãn là liên tục. Ví dụ, trong thiên văn học, nhiệm vụ xác định xem một đối tượng là ngôi sao, thiên hà hay quasar là vấn đề phân loại: nhãn là từ ba loại riêng biệt. Mặt khác, chúng ta có thể muốn ước tính tuổi của một đối tượng dựa trên những quan sát như vậy: đây sẽ là một vấn đề hồi quy, bởi vì nhãn (tuổi) là một số lượng liên tục.classification and regression. In classification, the label is discrete, while in regression, the label is continuous. For example, in astronomy, the task of determining whether an object is a star, a galaxy, or a quasar is a classification problem: the label is from three distinct categories. On the other hand, we might wish to estimate the age of an object based on such observations: this would be a regression problem, because the label (age) is a continuous quantity.

Phân loại: K Hàng xóm gần nhất (KNN) là một trong những chiến lược học tập đơn giản nhất: đưa ra một quan sát mới, chưa biết, tìm kiếm trong cơ sở dữ liệu tham khảo của bạn mà các chiến lược có các tính năng gần nhất và gán lớp chiếm ưu thế. Hãy để thử nó về vấn đề phân loại IRIS của chúng tôi:: K nearest neighbors (kNN) is one of the simplest learning strategies: given a new, unknown observation, look up in your reference database which ones have the closest features and assign the predominant class. Let’s try it out on our iris classification problem:

from sklearn import neighbors, datasets
iris = datasets.load_iris()
X, y = iris.data, iris.target
knn = neighbors.KNeighborsClassifier(n_neighbors=1)
knn.fit(X, y)
# What kind of iris has 3cm x 5cm sepal and 4cm x 2cm petal?
print(iris.target_names[knn.predict([[3, 5, 4, 2]])])

Hướng dẫn apply model to data python - áp dụng mô hình cho Python dữ liệu

Một âm mưu của không gian sepal và dự đoán của KNN

Hồi quy: Cài đặt hồi quy đơn giản nhất có thể là hồi quy tuyến tính Một:: The simplest possible regression setting is the linear regression one:

from sklearn.linear_model import LinearRegression

# x from 0 to 30
x = 30 * np.random.random((20, 1))

# y = a*x + b with noise
y = 0.5 * x + 1.0 + np.random.normal(size=x.shape)

# create a linear regression model
model = LinearRegression()
model.fit(x, y)

# predict y from the data
x_new = np.linspace(0, 30, 100)
y_new = model.predict(x_new[:, np.newaxis])

Hướng dẫn apply model to data python - áp dụng mô hình cho Python dữ liệu

Một âm mưu của một hồi quy tuyến tính đơn giản.

3.6.2.3. Một bản tóm tắt về giao diện ước tính Scikit-Learn,

Scikit-learn cố gắng có một giao diện thống nhất trên tất cả các phương thức và chúng tôi sẽ thấy các ví dụ về những điều này dưới đây. Với một đối tượng ước tính Scikit-learn có tên

from sklearn import neighbors, datasets
iris = datasets.load_iris()
X, y = iris.data, iris.target
knn = neighbors.KNeighborsClassifier(n_neighbors=1)
knn.fit(X, y)
# What kind of iris has 3cm x 5cm sepal and 4cm x 2cm petal?
print(iris.target_names[knn.predict([[3, 5, 4, 2]])])
8, các phương thức sau có sẵn:

Trong tất cả các công cụ ước tính:all Estimators:
& nbsp;
  • from sklearn import neighbors, datasets
    iris = datasets.load_iris()
    X, y = iris.data, iris.target
    knn = neighbors.KNeighborsClassifier(n_neighbors=1)
    knn.fit(X, y)
    # What kind of iris has 3cm x 5cm sepal and 4cm x 2cm petal?
    print(iris.target_names[knn.predict([[3, 5, 4, 2]])])
    
    9: Dữ liệu đào tạo phù hợp. Đối với các ứng dụng học tập có giám sát, điều này chấp nhận hai đối số: dữ liệu
    from sklearn.linear_model import LinearRegression
    
    # x from 0 to 30
    x = 30 * np.random.random((20, 1))
    
    # y = a*x + b with noise
    y = 0.5 * x + 1.0 + np.random.normal(size=x.shape)
    
    # create a linear regression model
    model = LinearRegression()
    model.fit(x, y)
    
    # predict y from the data
    x_new = np.linspace(0, 30, 100)
    y_new = model.predict(x_new[:, np.newaxis])
    
    
    0 và nhãn
    from sklearn.linear_model import LinearRegression
    
    # x from 0 to 30
    x = 30 * np.random.random((20, 1))
    
    # y = a*x + b with noise
    y = 0.5 * x + 1.0 + np.random.normal(size=x.shape)
    
    # create a linear regression model
    model = LinearRegression()
    model.fit(x, y)
    
    # predict y from the data
    x_new = np.linspace(0, 30, 100)
    y_new = model.predict(x_new[:, np.newaxis])
    
    
    1 (ví dụ:
    from sklearn.linear_model import LinearRegression
    
    # x from 0 to 30
    x = 30 * np.random.random((20, 1))
    
    # y = a*x + b with noise
    y = 0.5 * x + 1.0 + np.random.normal(size=x.shape)
    
    # create a linear regression model
    model = LinearRegression()
    model.fit(x, y)
    
    # predict y from the data
    x_new = np.linspace(0, 30, 100)
    y_new = model.predict(x_new[:, np.newaxis])
    
    
    2). Đối với các ứng dụng học tập không được giám sát, điều này chỉ chấp nhận một đối số duy nhất, dữ liệu
    from sklearn.linear_model import LinearRegression
    
    # x from 0 to 30
    x = 30 * np.random.random((20, 1))
    
    # y = a*x + b with noise
    y = 0.5 * x + 1.0 + np.random.normal(size=x.shape)
    
    # create a linear regression model
    model = LinearRegression()
    model.fit(x, y)
    
    # predict y from the data
    x_new = np.linspace(0, 30, 100)
    y_new = model.predict(x_new[:, np.newaxis])
    
    
    0 (ví dụ:
    from sklearn.linear_model import LinearRegression
    
    # x from 0 to 30
    x = 30 * np.random.random((20, 1))
    
    # y = a*x + b with noise
    y = 0.5 * x + 1.0 + np.random.normal(size=x.shape)
    
    # create a linear regression model
    model = LinearRegression()
    model.fit(x, y)
    
    # predict y from the data
    x_new = np.linspace(0, 30, 100)
    y_new = model.predict(x_new[:, np.newaxis])
    
    
    4).
Trong các công cụ ước tính có giám sát:supervised estimators:
& nbsp;
  • from sklearn import neighbors, datasets
    iris = datasets.load_iris()
    X, y = iris.data, iris.target
    knn = neighbors.KNeighborsClassifier(n_neighbors=1)
    knn.fit(X, y)
    # What kind of iris has 3cm x 5cm sepal and 4cm x 2cm petal?
    print(iris.target_names[knn.predict([[3, 5, 4, 2]])])
    
    9: Dữ liệu đào tạo phù hợp. Đối với các ứng dụng học tập có giám sát, điều này chấp nhận hai đối số: dữ liệu
    from sklearn.linear_model import LinearRegression
    
    # x from 0 to 30
    x = 30 * np.random.random((20, 1))
    
    # y = a*x + b with noise
    y = 0.5 * x + 1.0 + np.random.normal(size=x.shape)
    
    # create a linear regression model
    model = LinearRegression()
    model.fit(x, y)
    
    # predict y from the data
    x_new = np.linspace(0, 30, 100)
    y_new = model.predict(x_new[:, np.newaxis])
    
    
    0 và nhãn
    from sklearn.linear_model import LinearRegression
    
    # x from 0 to 30
    x = 30 * np.random.random((20, 1))
    
    # y = a*x + b with noise
    y = 0.5 * x + 1.0 + np.random.normal(size=x.shape)
    
    # create a linear regression model
    model = LinearRegression()
    model.fit(x, y)
    
    # predict y from the data
    x_new = np.linspace(0, 30, 100)
    y_new = model.predict(x_new[:, np.newaxis])
    
    
    1 (ví dụ:
    from sklearn.linear_model import LinearRegression
    
    # x from 0 to 30
    x = 30 * np.random.random((20, 1))
    
    # y = a*x + b with noise
    y = 0.5 * x + 1.0 + np.random.normal(size=x.shape)
    
    # create a linear regression model
    model = LinearRegression()
    model.fit(x, y)
    
    # predict y from the data
    x_new = np.linspace(0, 30, 100)
    y_new = model.predict(x_new[:, np.newaxis])
    
    
    2). Đối với các ứng dụng học tập không được giám sát, điều này chỉ chấp nhận một đối số duy nhất, dữ liệu
    from sklearn.linear_model import LinearRegression
    
    # x from 0 to 30
    x = 30 * np.random.random((20, 1))
    
    # y = a*x + b with noise
    y = 0.5 * x + 1.0 + np.random.normal(size=x.shape)
    
    # create a linear regression model
    model = LinearRegression()
    model.fit(x, y)
    
    # predict y from the data
    x_new = np.linspace(0, 30, 100)
    y_new = model.predict(x_new[:, np.newaxis])
    
    
    0 (ví dụ:
    from sklearn.linear_model import LinearRegression
    
    # x from 0 to 30
    x = 30 * np.random.random((20, 1))
    
    # y = a*x + b with noise
    y = 0.5 * x + 1.0 + np.random.normal(size=x.shape)
    
    # create a linear regression model
    model = LinearRegression()
    model.fit(x, y)
    
    # predict y from the data
    x_new = np.linspace(0, 30, 100)
    y_new = model.predict(x_new[:, np.newaxis])
    
    
    4).
  • Trong các công cụ ước tính có giám sát:
  • from sklearn.linear_model import LinearRegression
    
    # x from 0 to 30
    x = 30 * np.random.random((20, 1))
    
    # y = a*x + b with noise
    y = 0.5 * x + 1.0 + np.random.normal(size=x.shape)
    
    # create a linear regression model
    model = LinearRegression()
    model.fit(x, y)
    
    # predict y from the data
    x_new = np.linspace(0, 30, 100)
    y_new = model.predict(x_new[:, np.newaxis])
    
    
    5: Đưa ra một mô hình được đào tạo, dự đoán nhãn của một bộ dữ liệu mới. Phương thức này chấp nhận một đối số, dữ liệu mới
    from sklearn.linear_model import LinearRegression
    
    # x from 0 to 30
    x = 30 * np.random.random((20, 1))
    
    # y = a*x + b with noise
    y = 0.5 * x + 1.0 + np.random.normal(size=x.shape)
    
    # create a linear regression model
    model = LinearRegression()
    model.fit(x, y)
    
    # predict y from the data
    x_new = np.linspace(0, 30, 100)
    y_new = model.predict(x_new[:, np.newaxis])
    
    
    6 (ví dụ:
    from sklearn.linear_model import LinearRegression
    
    # x from 0 to 30
    x = 30 * np.random.random((20, 1))
    
    # y = a*x + b with noise
    y = 0.5 * x + 1.0 + np.random.normal(size=x.shape)
    
    # create a linear regression model
    model = LinearRegression()
    model.fit(x, y)
    
    # predict y from the data
    x_new = np.linspace(0, 30, 100)
    y_new = model.predict(x_new[:, np.newaxis])
    
    
    7) và trả về nhãn đã học cho mỗi đối tượng trong mảng.
from sklearn.linear_model import LinearRegression

# x from 0 to 30
x = 30 * np.random.random((20, 1))

# y = a*x + b with noise
y = 0.5 * x + 1.0 + np.random.normal(size=x.shape)

# create a linear regression model
model = LinearRegression()
model.fit(x, y)

# predict y from the data
x_new = np.linspace(0, 30, 100)
y_new = model.predict(x_new[:, np.newaxis])

8: Đối với các vấn đề phân loại, một số công cụ ước tính cũng cung cấp phương pháp này, trả về xác suất mà một quan sát mới có mỗi nhãn phân loại. Trong trường hợp này, nhãn có xác suất cao nhất được trả về bởi
from sklearn.linear_model import LinearRegression

# x from 0 to 30
x = 30 * np.random.random((20, 1))

# y = a*x + b with noise
y = 0.5 * x + 1.0 + np.random.normal(size=x.shape)

# create a linear regression model
model = LinearRegression()
model.fit(x, y)

# predict y from the data
x_new = np.linspace(0, 30, 100)
y_new = model.predict(x_new[:, np.newaxis])

5.unsupervised estimators:
& nbsp;
  • from sklearn import neighbors, datasets
    iris = datasets.load_iris()
    X, y = iris.data, iris.target
    knn = neighbors.KNeighborsClassifier(n_neighbors=1)
    knn.fit(X, y)
    # What kind of iris has 3cm x 5cm sepal and 4cm x 2cm petal?
    print(iris.target_names[knn.predict([[3, 5, 4, 2]])])
    
    9: Dữ liệu đào tạo phù hợp. Đối với các ứng dụng học tập có giám sát, điều này chấp nhận hai đối số: dữ liệu
    from sklearn.linear_model import LinearRegression
    
    # x from 0 to 30
    x = 30 * np.random.random((20, 1))
    
    # y = a*x + b with noise
    y = 0.5 * x + 1.0 + np.random.normal(size=x.shape)
    
    # create a linear regression model
    model = LinearRegression()
    model.fit(x, y)
    
    # predict y from the data
    x_new = np.linspace(0, 30, 100)
    y_new = model.predict(x_new[:, np.newaxis])
    
    
    0 và nhãn
    from sklearn.linear_model import LinearRegression
    
    # x from 0 to 30
    x = 30 * np.random.random((20, 1))
    
    # y = a*x + b with noise
    y = 0.5 * x + 1.0 + np.random.normal(size=x.shape)
    
    # create a linear regression model
    model = LinearRegression()
    model.fit(x, y)
    
    # predict y from the data
    x_new = np.linspace(0, 30, 100)
    y_new = model.predict(x_new[:, np.newaxis])
    
    
    1 (ví dụ:
    from sklearn.linear_model import LinearRegression
    
    # x from 0 to 30
    x = 30 * np.random.random((20, 1))
    
    # y = a*x + b with noise
    y = 0.5 * x + 1.0 + np.random.normal(size=x.shape)
    
    # create a linear regression model
    model = LinearRegression()
    model.fit(x, y)
    
    # predict y from the data
    x_new = np.linspace(0, 30, 100)
    y_new = model.predict(x_new[:, np.newaxis])
    
    
    2). Đối với các ứng dụng học tập không được giám sát, điều này chỉ chấp nhận một đối số duy nhất, dữ liệu
    from sklearn.linear_model import LinearRegression
    
    # x from 0 to 30
    x = 30 * np.random.random((20, 1))
    
    # y = a*x + b with noise
    y = 0.5 * x + 1.0 + np.random.normal(size=x.shape)
    
    # create a linear regression model
    model = LinearRegression()
    model.fit(x, y)
    
    # predict y from the data
    x_new = np.linspace(0, 30, 100)
    y_new = model.predict(x_new[:, np.newaxis])
    
    
    0 (ví dụ:
    from sklearn.linear_model import LinearRegression
    
    # x from 0 to 30
    x = 30 * np.random.random((20, 1))
    
    # y = a*x + b with noise
    y = 0.5 * x + 1.0 + np.random.normal(size=x.shape)
    
    # create a linear regression model
    model = LinearRegression()
    model.fit(x, y)
    
    # predict y from the data
    x_new = np.linspace(0, 30, 100)
    y_new = model.predict(x_new[:, np.newaxis])
    
    
    4).
  • Trong các công cụ ước tính có giám sát:

from sklearn.linear_model import LinearRegression # x from 0 to 30 x = 30 * np.random.random((20, 1)) # y = a*x + b with noise y = 0.5 * x + 1.0 + np.random.normal(size=x.shape) # create a linear regression model model = LinearRegression() model.fit(x, y) # predict y from the data x_new = np.linspace(0, 30, 100) y_new = model.predict(x_new[:, np.newaxis]) 5: Đưa ra một mô hình được đào tạo, dự đoán nhãn của một bộ dữ liệu mới. Phương thức này chấp nhận một đối số, dữ liệu mới from sklearn.linear_model import LinearRegression # x from 0 to 30 x = 30 * np.random.random((20, 1)) # y = a*x + b with noise y = 0.5 * x + 1.0 + np.random.normal(size=x.shape) # create a linear regression model model = LinearRegression() model.fit(x, y) # predict y from the data x_new = np.linspace(0, 30, 100) y_new = model.predict(x_new[:, np.newaxis]) 6 (ví dụ: from sklearn.linear_model import LinearRegression # x from 0 to 30 x = 30 * np.random.random((20, 1)) # y = a*x + b with noise y = 0.5 * x + 1.0 + np.random.normal(size=x.shape) # create a linear regression model model = LinearRegression() model.fit(x, y) # predict y from the data x_new = np.linspace(0, 30, 100) y_new = model.predict(x_new[:, np.newaxis]) 7) và trả về nhãn đã học cho mỗi đối tượng trong mảng.

from sklearn.linear_model import LinearRegression

# x from 0 to 30
x = 30 * np.random.random((20, 1))

# y = a*x + b with noise
y = 0.5 * x + 1.0 + np.random.normal(size=x.shape)

# create a linear regression model
model = LinearRegression()
model.fit(x, y)

# predict y from the data
x_new = np.linspace(0, 30, 100)
y_new = model.predict(x_new[:, np.newaxis])

8: Đối với các vấn đề phân loại, một số công cụ ước tính cũng cung cấp phương pháp này, trả về xác suất mà một quan sát mới có mỗi nhãn phân loại. Trong trường hợp này, nhãn có xác suất cao nhất được trả về bởi
from sklearn.linear_model import LinearRegression

# x from 0 to 30
x = 30 * np.random.random((20, 1))

# y = a*x + b with noise
y = 0.5 * x + 1.0 + np.random.normal(size=x.shape)

# create a linear regression model
model = LinearRegression()
model.fit(x, y)

# predict y from the data
x_new = np.linspace(0, 30, 100)
y_new = model.predict(x_new[:, np.newaxis])

5.

>>> print(iris.data.shape)
(150, 4)
>>> n_samples, n_features = iris.data.shape
>>> print(n_samples)
150
>>> print(n_features)
4
>>> print(iris.data[0])
[5.1  3.5  1.4  0.2]
00: Đối với các vấn đề phân loại hoặc hồi quy, hầu hết (tất cả?) Các công cụ ước tính thực hiện một phương pháp điểm số. Điểm số là từ 0 đến 1, với điểm số lớn hơn cho thấy phù hợp hơn. Suppose you are using a 1-nearest neighbor estimator. How many errors do you expect on your train set?

  • Trong các công cụ ước tính không giám sát:
  • >>> print(iris.data.shape)
    (150, 4)
    >>> n_samples, n_features = iris.data.shape
    >>> print(n_samples)
    150
    >>> print(n_features)
    4
    >>> print(iris.data[0])
    [5.1  3.5  1.4  0.2]
    
    01: Đưa ra một mô hình không giám sát, chuyển đổi dữ liệu mới thành cơ sở mới. Điều này cũng chấp nhận một đối số
    from sklearn.linear_model import LinearRegression
    
    # x from 0 to 30
    x = 30 * np.random.random((20, 1))
    
    # y = a*x + b with noise
    y = 0.5 * x + 1.0 + np.random.normal(size=x.shape)
    
    # create a linear regression model
    model = LinearRegression()
    model.fit(x, y)
    
    # predict y from the data
    x_new = np.linspace(0, 30, 100)
    y_new = model.predict(x_new[:, np.newaxis])
    
    
    6 và trả về biểu diễn mới của dữ liệu dựa trên mô hình không giám sát.

>>> print(iris.data.shape)
(150, 4)
>>> n_samples, n_features = iris.data.shape
>>> print(n_samples)
150
>>> print(n_features)
4
>>> print(iris.data[0])
[5.1  3.5  1.4  0.2]
03: Một số công cụ ước tính thực hiện phương pháp này, thực hiện hiệu quả hơn một sự phù hợp và biến đổi trên cùng một dữ liệu đầu vào. The core idea behind regularization is that we are going to prefer models that are simpler, for a certain definition of ‘’simpler’’, even if they lead to more errors on the train set.

Ví dụ, hãy để Lừa tạo ra đa thức bậc 9, với tiếng ồn:

Hướng dẫn apply model to data python - áp dụng mô hình cho Python dữ liệu

Và bây giờ, hãy để phù hợp với đơn hàng thứ 4 và đa thức thứ tự thứ 9 với dữ liệu.

Hướng dẫn apply model to data python - áp dụng mô hình cho Python dữ liệu

Với đôi mắt trần trụi của bạn, bạn thích mô hình nào, thứ tự thứ 4 hoặc thứ tự thứ 9?

Hãy cùng nhìn vào sự thật mặt đất:

Hướng dẫn apply model to data python - áp dụng mô hình cho Python dữ liệu

Mẹo

Chính quy hóa là phổ biến trong học máy. Hầu hết các công cụ ước tính scikit-learn có một tham số để điều chỉnh lượng chính quy hóa. Chẳng hạn, với K-NN, đó là ‘K, số lượng hàng xóm gần nhất được sử dụng để đưa ra quyết định. K = 1 số tiền không chính quy hóa: 0 Lỗi trên tập huấn luyện, trong khi K lớn sẽ đẩy vào ranh giới quyết định mượt mà hơn trong không gian tính năng.

Các mô hình đơn giản so với phức tạp để phân loại thánh

Hướng dẫn apply model to data python - áp dụng mô hình cho Python dữ liệu
Hướng dẫn apply model to data python - áp dụng mô hình cho Python dữ liệu
Một sự phân tách tuyến tínhMột sự tách biệt phi tuyến tính

Mẹo

Chính quy hóa là phổ biến trong học máy. Hầu hết các công cụ ước tính scikit-learn có một tham số để điều chỉnh lượng chính quy hóa. Chẳng hạn, với K-NN, đó là ‘K, số lượng hàng xóm gần nhất được sử dụng để đưa ra quyết định. K = 1 số tiền không chính quy hóa: 0 Lỗi trên tập huấn luyện, trong khi K lớn sẽ đẩy vào ranh giới quyết định mượt mà hơn trong không gian tính năng.

Các mô hình đơn giản so với phức tạp để phân loại thánh

Một sự phân tách tuyến tính

Một sự tách biệt phi tuyến tính

>>> print(iris.data.shape)
(150, 4)
>>> n_samples, n_features = iris.data.shape
>>> print(n_samples)
150
>>> print(n_features)
4
>>> print(iris.data[0])
[5.1  3.5  1.4  0.2]
0

Hướng dẫn apply model to data python - áp dụng mô hình cho Python dữ liệu

Đối với các mô hình phân loại, ranh giới quyết định, phân tách lớp thể hiện sự phức tạp của mô hình. Ví dụ, một mô hình tuyến tính, đưa ra quyết định dựa trên sự kết hợp tuyến tính của các tính năng, phức tạp hơn so với mô hình phi tuyến tính.

>>> print(iris.data.shape)
(150, 4)
>>> n_samples, n_features = iris.data.shape
>>> print(n_samples)
150
>>> print(n_features)
4
>>> print(iris.data[0])
[5.1  3.5  1.4  0.2]
1

3.6.3. Học tập có giám sát: Phân loại chữ viết viết tay Jo

3.6.3.1. Bản chất của dữ liệu

Trong phần này, chúng tôi sẽ áp dụng Scikit-learn vào việc phân loại các chữ số viết tay. Điều này sẽ vượt xa phân loại IRIS mà chúng ta đã thấy trước đây: chúng ta sẽ thảo luận về một số số liệu có thể được sử dụng để đánh giá hiệu quả của mô hình phân loại.

>>> print(iris.data.shape)
(150, 4)
>>> n_samples, n_features = iris.data.shape
>>> print(n_samples)
150
>>> print(n_features)
4
>>> print(iris.data[0])
[5.1  3.5  1.4  0.2]
2

Hướng dẫn apply model to data python - áp dụng mô hình cho Python dữ liệu

Hãy để chúng tôi trực quan hóa dữ liệu và nhắc nhở chúng tôi những gì chúng tôi đang xem xét (nhấp vào hình cho mã đầy đủ):

3.6.3.2. Trực quan hóa dữ liệu trên các thành phần chính của nó

Một bước đầu tiên tốt cho nhiều vấn đề là trực quan hóa dữ liệu bằng kỹ thuật giảm chiều. Chúng tôi sẽ bắt đầu với cái đơn giản nhất, phân tích thành phần chính (PCA).

PCA tìm kiếm các kết hợp tuyến tính trực giao của các tính năng cho thấy phương sai lớn nhất và như vậy, có thể giúp bạn có ý tưởng tốt về cấu trúc của tập dữ liệu.

Câu hỏi

Mẹo

Chính quy hóa là phổ biến trong học máy. Hầu hết các công cụ ước tính scikit-learn có một tham số để điều chỉnh lượng chính quy hóa. Chẳng hạn, với K-NN, đó là ‘K, số lượng hàng xóm gần nhất được sử dụng để đưa ra quyết định. K = 1 số tiền không chính quy hóa: 0 Lỗi trên tập huấn luyện, trong khi K lớn sẽ đẩy vào ranh giới quyết định mượt mà hơn trong không gian tính năng.

>>> print(iris.data.shape)
(150, 4)
>>> n_samples, n_features = iris.data.shape
>>> print(n_samples)
150
>>> print(n_features)
4
>>> print(iris.data[0])
[5.1  3.5  1.4  0.2]
3

Các mô hình đơn giản so với phức tạp để phân loại thánh

Hướng dẫn apply model to data python - áp dụng mô hình cho Python dữ liệu

Hãy để chúng tôi trực quan hóa dữ liệu và nhắc nhở chúng tôi những gì chúng tôi đang xem xét (nhấp vào hình cho mã đầy đủ):

3.6.3.2. Trực quan hóa dữ liệu trên các thành phần chính của nó

Một bước đầu tiên tốt cho nhiều vấn đề là trực quan hóa dữ liệu bằng kỹ thuật giảm chiều. Chúng tôi sẽ bắt đầu với cái đơn giản nhất, phân tích thành phần chính (PCA).

PCA tìm kiếm các kết hợp tuyến tính trực giao của các tính năng cho thấy phương sai lớn nhất và như vậy, có thể giúp bạn có ý tưởng tốt về cấu trúc của tập dữ liệu.

>>> print(iris.data.shape)
(150, 4)
>>> n_samples, n_features = iris.data.shape
>>> print(n_samples)
150
>>> print(n_features)
4
>>> print(iris.data[0])
[5.1  3.5  1.4  0.2]
4

Câu hỏi

Với các dự đoán của dữ liệu, bạn nghĩ rằng một trình phân loại có thể gặp khó khăn trong việc phân biệt?

>>> print(iris.data.shape)
(150, 4)
>>> n_samples, n_features = iris.data.shape
>>> print(n_samples)
150
>>> print(n_features)
4
>>> print(iris.data[0])
[5.1  3.5  1.4  0.2]
5

3.6.3.3. Gaussian Naive Bayes Phân loại Bur

>>> print(iris.data.shape)
(150, 4)
>>> n_samples, n_features = iris.data.shape
>>> print(n_samples)
150
>>> print(n_features)
4
>>> print(iris.data[0])
[5.1  3.5  1.4  0.2]
6

Đối với hầu hết các vấn đề phân loại, nó rất tốt khi có một phương pháp đơn giản, nhanh chóng để cung cấp một phân loại cơ bản nhanh chóng. Nếu phương pháp đơn giản và nhanh chóng là đủ, thì chúng tôi không phải lãng phí chu kỳ CPU trên các mô hình phức tạp hơn. Nếu không, chúng ta có thể sử dụng kết quả của phương pháp đơn giản để cung cấp cho chúng ta manh mối về dữ liệu của mình.

Một phương pháp tốt để ghi nhớ là Gaussian Naive Bayes (>>> print(iris.data.shape) (150, 4) >>> n_samples, n_features = iris.data.shape >>> print(n_samples) 150 >>> print(n_features) 4 >>> print(iris.data[0]) [5.1 3.5 1.4 0.2] 04).

Gaussian Naive Bayes phù hợp với phân phối Gaussian cho mỗi nhãn đào tạo độc lập trên mỗi tính năng và sử dụng điều này để nhanh chóng đưa ra một phân loại sơ bộ. Nói chung, nó không đủ chính xác cho dữ liệu trong thế giới thực, nhưng có thể thực hiện tốt một cách đáng ngạc nhiên, ví dụ trên dữ liệu văn bản.

Như trên, chúng tôi vẽ các chữ số với các nhãn dự đoán để có ý tưởng về mức độ phân loại hoạt động tốt như thế nào.

Tại sao chúng tôi chia dữ liệu thành các bộ đào tạo và xác nhận?

>>> print(iris.data.shape)
(150, 4)
>>> n_samples, n_features = iris.data.shape
>>> print(n_samples)
150
>>> print(n_features)
4
>>> print(iris.data[0])
[5.1  3.5  1.4  0.2]
7

3.6.3.4. Đo lường định lượng của hiệu suất¶

Chúng tôi muốn đo lường hiệu suất của công cụ ước tính mà không phải dùng đến các ví dụ âm mưu. Một phương pháp đơn giản có thể chỉ đơn giản là so sánh số lượng trận đấu:

>>> print(iris.data.shape)
(150, 4)
>>> n_samples, n_features = iris.data.shape
>>> print(n_samples)
150
>>> print(n_features)
4
>>> print(iris.data[0])
[5.1  3.5  1.4  0.2]
8

Chúng tôi thấy rằng hơn 80% trong số 450 dự đoán phù hợp với đầu vào. Nhưng có những số liệu tinh vi khác có thể được sử dụng để đánh giá hiệu suất của một phân loại: một số có sẵn trong mô hình con ____105.

>>> print(iris.data.shape)
(150, 4)
>>> n_samples, n_features = iris.data.shape
>>> print(n_samples)
150
>>> print(n_features)
4
>>> print(iris.data[0])
[5.1  3.5  1.4  0.2]
9

Hướng dẫn apply model to data python - áp dụng mô hình cho Python dữ liệu

Hãy để một cái nhìn nhanh để xem một số tính năng có phù hợp hơn các tính năng khác cho vấn đề của chúng tôi không:

>>> print(iris.target.shape)
(150,)
>>> print(iris.target)
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2
 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 2 2]
0

Hướng dẫn apply model to data python - áp dụng mô hình cho Python dữ liệu
Hướng dẫn apply model to data python - áp dụng mô hình cho Python dữ liệu
Hướng dẫn apply model to data python - áp dụng mô hình cho Python dữ liệu
Hướng dẫn apply model to data python - áp dụng mô hình cho Python dữ liệu
Hướng dẫn apply model to data python - áp dụng mô hình cho Python dữ liệu
Hướng dẫn apply model to data python - áp dụng mô hình cho Python dữ liệu
Hướng dẫn apply model to data python - áp dụng mô hình cho Python dữ liệu
Hướng dẫn apply model to data python - áp dụng mô hình cho Python dữ liệu

Đây là phiên bản thủ công của một kỹ thuật gọi là lựa chọn tính năng.feature selection.

Mẹo

Đôi khi, trong việc học máy, rất hữu ích khi sử dụng lựa chọn tính năng để quyết định tính năng nào là hữu ích nhất cho một vấn đề cụ thể. Các phương pháp tự động tồn tại trong đó định lượng loại bài tập này để chọn các tính năng nhiều thông tin nhất.

3.6.4.2. Dự đoán giá nhà: Một hồi quy tuyến tính đơn giản

Bây giờ chúng tôi sẽ sử dụng

from sklearn import neighbors, datasets
iris = datasets.load_iris()
X, y = iris.data, iris.target
knn = neighbors.KNeighborsClassifier(n_neighbors=1)
knn.fit(X, y)
# What kind of iris has 3cm x 5cm sepal and 4cm x 2cm petal?
print(iris.target_names[knn.predict([[3, 5, 4, 2]])])
2 để thực hiện hồi quy tuyến tính đơn giản trên dữ liệu nhà ở. Có nhiều khả năng của những người hồi quy để sử dụng. Một điều đặc biệt đơn giản là
>>> print(iris.data.shape)
(150, 4)
>>> n_samples, n_features = iris.data.shape
>>> print(n_samples)
150
>>> print(n_features)
4
>>> print(iris.data[0])
[5.1  3.5  1.4  0.2]
09: Đây về cơ bản là một trình bao bọc xung quanh tính toán bình phương tối thiểu thông thường.

>>> print(iris.target.shape)
(150,)
>>> print(iris.target)
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2
 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 2 2]
1

Hướng dẫn apply model to data python - áp dụng mô hình cho Python dữ liệu

Chúng ta có thể vẽ lỗi lỗi: dự kiến ​​là một hàm của dự đoán:

>>> print(iris.target.shape)
(150,)
>>> print(iris.target)
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2
 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 2 2]
2

Mẹo

Đôi khi, trong việc học máy, rất hữu ích khi sử dụng lựa chọn tính năng để quyết định tính năng nào là hữu ích nhất cho một vấn đề cụ thể. Các phương pháp tự động tồn tại trong đó định lượng loại bài tập này để chọn các tính năng nhiều thông tin nhất.

3.6.4.2. Dự đoán giá nhà: Một hồi quy tuyến tính đơn giản

Bây giờ chúng tôi sẽ sử dụng

from sklearn import neighbors, datasets
iris = datasets.load_iris()
X, y = iris.data, iris.target
knn = neighbors.KNeighborsClassifier(n_neighbors=1)
knn.fit(X, y)
# What kind of iris has 3cm x 5cm sepal and 4cm x 2cm petal?
print(iris.target_names[knn.predict([[3, 5, 4, 2]])])
2 để thực hiện hồi quy tuyến tính đơn giản trên dữ liệu nhà ở. Có nhiều khả năng của những người hồi quy để sử dụng. Một điều đặc biệt đơn giản là
>>> print(iris.data.shape)
(150, 4)
>>> n_samples, n_features = iris.data.shape
>>> print(n_samples)
150
>>> print(n_features)
4
>>> print(iris.data[0])
[5.1  3.5  1.4  0.2]
09: Đây về cơ bản là một trình bao bọc xung quanh tính toán bình phương tối thiểu thông thường.

Chúng ta có thể vẽ lỗi lỗi: dự kiến ​​là một hàm của dự đoán:.

Dự đoán ít nhất tương quan với giá thực, mặc dù rõ ràng có một số thành kiến. Chúng ta có thể tưởng tượng đánh giá hiệu suất của bộ hồi quy bằng cách, tính toán phần dư RMS giữa giá thực và dự đoán. Tuy nhiên, có một số sự tinh tế trong việc này, tuy nhiên, chúng tôi sẽ đề cập đến một phần sau. You can copy and paste some of the above code, replacing

>>> print(iris.data.shape)
(150, 4)
>>> n_samples, n_features = iris.data.shape
>>> print(n_samples)
150
>>> print(n_features)
4
>>> print(iris.data[0])
[5.1  3.5  1.4  0.2]
09 with
>>> print(iris.data.shape)
(150, 4)
>>> n_samples, n_features = iris.data.shape
>>> print(n_samples)
150
>>> print(n_features)
4
>>> print(iris.data[0])
[5.1  3.5  1.4  0.2]
11:

>>> print(iris.target.shape)
(150,)
>>> print(iris.target)
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2
 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 2 2]
3

Tập thể dục: GRADIEIDIE BOOsting Tree Repression The solution is found in the code of this chapter

Có nhiều loại hồi quy khác có sẵn trong Scikit-learn: chúng tôi sẽ thử một loại mạnh hơn ở đây.

Sử dụng lớp gradientBoostingRatoryor để phù hợp với dữ liệu nhà ở.

Gợi ý bạn có thể sao chép và dán một số mã trên, thay thế

>>> print(iris.data.shape)
(150, 4)
>>> n_samples, n_features = iris.data.shape
>>> print(n_samples)
150
>>> print(n_features)
4
>>> print(iris.data[0])
[5.1  3.5  1.4  0.2]
09 bằng
>>> print(iris.data.shape)
(150, 4)
>>> n_samples, n_features = iris.data.shape
>>> print(n_samples)
150
>>> print(n_features)
4
>>> print(iris.data[0])
[5.1  3.5  1.4  0.2]
11:

>>> print(iris.target.shape)
(150,)
>>> print(iris.target)
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2
 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 2 2]
4

Giải pháp Giải pháp được tìm thấy trong mã của chương này

3.6.5. Đo lường hiệu suất dự đoán Bur

>>> print(iris.target.shape)
(150,)
>>> print(iris.target)
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2
 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 2 2]
5

Hướng dẫn apply model to data python - áp dụng mô hình cho Python dữ liệu

3.6.5.1. Một bài kiểm tra nhanh về phân loại K-neighbors

Ở đây, chúng tôi sẽ tiếp tục xem xét dữ liệu chữ số, nhưng chúng tôi sẽ chuyển sang phân loại K-lân cận. Trình phân loại K-neighbors là một trình phân loại dựa trên thể hiện. Trình phân loại K-neighbors dự đoán nhãn của một điểm không xác định dựa trên nhãn của các điểm gần nhất trong không gian tham số.

Rõ ràng, chúng tôi đã tìm thấy một trình phân loại hoàn hảo! Nhưng điều này là sai lệch vì những lý do chúng tôi đã thấy trước đây: người phân loại về cơ bản là ghi nhớ tất cả các mẫu mà nó đã thấy. Để thực sự kiểm tra thuật toán này tốt như thế nào, chúng ta cần thử một số mẫu mà nó đã thấy.

Vấn đề này cũng xảy ra với các mô hình hồi quy. Trong phần sau, chúng tôi phù hợp với một mô hình dựa trên thể hiện khác có tên là Tree Rusin Tree, với bộ dữ liệu giá nhà ở California mà chúng tôi đã giới thiệu trước đây:

Ở đây một lần nữa, các dự đoán dường như hoàn hảo vì mô hình đã có thể ghi nhớ hoàn hảo bộ đào tạo.

Cảnh báo

Hiệu suất trên bộ kiểm tra

  • Hiệu suất trên bộ kiểm tra không đo lường quá mức (như được mô tả ở trên)
  • 3.6.5.2. Một cách tiếp cận chính xác: Sử dụng bộ xác thực

Học các tham số của hàm dự đoán và kiểm tra nó trên cùng một dữ liệu là một sai lầm về phương pháp: một mô hình sẽ lặp lại nhãn của các mẫu mà nó vừa thấy sẽ có một số điểm hoàn hảo nhưng sẽ không dự đoán bất cứ điều gì hữu ích trên Dữ liệu vô hình.

>>> print(iris.target.shape)
(150,)
>>> print(iris.target)
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2
 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 2 2]
6

Để tránh quá mức, chúng ta phải xác định hai bộ khác nhau:

>>> print(iris.target.shape)
(150,)
>>> print(iris.target)
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2
 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 2 2]
7

Một tập huấn luyện x_train, y_train được sử dụng để học các tham số của mô hình dự đoán

>>> print(iris.target.shape)
(150,)
>>> print(iris.target)
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2
 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 2 2]
8

Một bộ thử nghiệm x_test, y_test được sử dụng để đánh giá mô hình dự đoán được trang bị

>>> print(iris.target.shape)
(150,)
>>> print(iris.target)
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2
 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 2 2]
9

Trong scikit-learn, một sự phân chia ngẫu nhiên như vậy có thể được tính toán nhanh chóng với hàm

>>> print(iris.data.shape)
(150, 4)
>>> n_samples, n_features = iris.data.shape
>>> print(n_samples)
150
>>> print(n_features)
4
>>> print(iris.data[0])
[5.1  3.5  1.4  0.2]
12:

Bây giờ chúng tôi đào tạo dữ liệu đào tạo và kiểm tra dữ liệu kiểm tra: In the case of regression models, we need to use different metrics, such as explained variance.

Điểm số F1 trung bình thường được sử dụng như một thước đo thuận tiện cho hiệu suất tổng thể của thuật toán. Nó xuất hiện trong hàng dưới cùng của báo cáo phân loại; Nó cũng có thể được truy cập trực tiếp:

Mẹo

Sự phù hợp quá mức mà chúng tôi đã thấy trước đây có thể được định lượng bằng cách tính toán điểm F1 trên chính dữ liệu đào tạo:

  • Ghi chúvalidation set? Recall that hyperparameters are the parameters set when you instantiate the classifier: for example, the

    >>> print(iris.data.shape)
    (150, 4)
    >>> n_samples, n_features = iris.data.shape
    >>> print(n_samples)
    150
    >>> print(n_features)
    4
    >>> print(iris.data[0])
    [5.1  3.5  1.4  0.2]
    
    13 in
    >>> print(iris.data.shape)
    (150, 4)
    >>> n_samples, n_features = iris.data.shape
    >>> print(n_samples)
    150
    >>> print(n_features)
    4
    >>> print(iris.data[0])
    [5.1  3.5  1.4  0.2]
    
    14

    >>> print(iris.target_names)
    ['setosa' 'versicolor' 'virginica']
    
    0

  • Các số liệu hồi quy Trong trường hợp mô hình hồi quy, chúng ta cần sử dụng các số liệu khác nhau, chẳng hạn như phương sai được giải thích.

    >>> print(iris.target_names)
    ['setosa' 'versicolor' 'virginica']
    
    1

    Giải pháp: Nguồn mã code source

3.6.5.4. Xử lý chéo¶

Xác thực chéo bao gồm phân tách dữ liệu theo từng cặp tàu và bộ thử nghiệm, được gọi là ‘nếp gấp. Scikit-learn đi kèm với một chức năng để tự động tính điểm trên tất cả các nếp gấp này. Ở đây chúng tôi làm

>>> print(iris.data.shape)
(150, 4)
>>> n_samples, n_features = iris.data.shape
>>> print(n_samples)
150
>>> print(n_features)
4
>>> print(iris.data[0])
[5.1  3.5  1.4  0.2]
21 với k = 5.

>>> print(iris.target_names)
['setosa' 'versicolor' 'virginica']
2

Chúng ta có thể sử dụng các chiến lược phân tách khác nhau, chẳng hạn như phân tách ngẫu nhiên:

>>> print(iris.target_names)
['setosa' 'versicolor' 'virginica']
3

3.6.5.5. Tối ưu hóa hyperparameter với xác nhận chéo Bur

Xem xét các mô hình tuyến tính chính quy, chẳng hạn như hồi quy Ridge, sử dụng L2 thường xuyên và hồi quy Lasso, sử dụng chính quy L1. Chọn tham số chính quy của họ là quan trọng.

Hãy để chúng tôi đặt các tham số này trên bộ dữ liệu bệnh tiểu đường, một vấn đề hồi quy đơn giản. Dữ liệu bệnh tiểu đường bao gồm 10 biến số sinh lý (tuổi, giới tính, cân nặng, huyết áp) trên 442 bệnh nhân và chỉ định tiến triển bệnh sau một năm:

>>> print(iris.target_names)
['setosa' 'versicolor' 'virginica']
4

Với các tham số siêu mặc định: chúng tôi tính toán điểm xác thực chéo:

>>> print(iris.target_names)
['setosa' 'versicolor' 'virginica']
5

Tối ưu hóa siêu đồng hồ cơ bản

Chúng tôi tính toán điểm xác thực chéo là một hàm của alpha, sức mạnh của việc chính quy hóa cho

>>> print(iris.data.shape)
(150, 4)
>>> n_samples, n_features = iris.data.shape
>>> print(n_samples)
150
>>> print(n_features)
4
>>> print(iris.data[0])
[5.1  3.5  1.4  0.2]
22 và
>>> print(iris.data.shape)
(150, 4)
>>> n_samples, n_features = iris.data.shape
>>> print(n_samples)
150
>>> print(n_features)
4
>>> print(iris.data[0])
[5.1  3.5  1.4  0.2]
23. Chúng tôi chọn 20 giá trị alpha trong khoảng 0,0001 đến 1:

>>> print(iris.target_names)
['setosa' 'versicolor' 'virginica']
6

Hướng dẫn apply model to data python - áp dụng mô hình cho Python dữ liệu

Câu hỏi

Chúng ta có thể tin tưởng kết quả của chúng ta là thực sự hữu ích?

Tự động thực hiện tìm kiếm lưới

>>> print(iris.data.shape)
(150, 4)
>>> n_samples, n_features = iris.data.shape
>>> print(n_samples)
150
>>> print(n_features)
4
>>> print(iris.data[0])
[5.1  3.5  1.4  0.2]
24 được xây dựng với một công cụ ước tính, cũng như một từ điển các giá trị tham số sẽ được tìm kiếm. Chúng ta có thể tìm thấy các tham số tối ưu theo cách này:

>>> print(iris.target_names)
['setosa' 'versicolor' 'virginica']
7

Tìm kiếm siêu nhân tích hợp

Đối với một số mô hình trong scikit-learn, xác thực chéo có thể được thực hiện hiệu quả hơn trên các bộ dữ liệu lớn. Trong trường hợp này, một phiên bản được xác nhận chéo của mô hình cụ thể được bao gồm. Các phiên bản được xác nhận chéo của

>>> print(iris.data.shape)
(150, 4)
>>> n_samples, n_features = iris.data.shape
>>> print(n_samples)
150
>>> print(n_features)
4
>>> print(iris.data[0])
[5.1  3.5  1.4  0.2]
23 và
>>> print(iris.data.shape)
(150, 4)
>>> n_samples, n_features = iris.data.shape
>>> print(n_samples)
150
>>> print(n_features)
4
>>> print(iris.data[0])
[5.1  3.5  1.4  0.2]
22 lần lượt là
>>> print(iris.data.shape)
(150, 4)
>>> n_samples, n_features = iris.data.shape
>>> print(n_samples)
150
>>> print(n_features)
4
>>> print(iris.data[0])
[5.1  3.5  1.4  0.2]
27 và
>>> print(iris.data.shape)
(150, 4)
>>> n_samples, n_features = iris.data.shape
>>> print(n_samples)
150
>>> print(n_features)
4
>>> print(iris.data[0])
[5.1  3.5  1.4  0.2]
28. Tìm kiếm tham số trên các công cụ ước tính này có thể được thực hiện như sau:

>>> print(iris.target_names)
['setosa' 'versicolor' 'virginica']
8

Chúng tôi thấy rằng kết quả khớp với kết quả được trả về bởi GridSearchCV

Xác nhận chéo lồng nhau

Làm thế nào để chúng tôi đo lường hiệu suất của các công cụ ước tính này? Chúng tôi đã sử dụng dữ liệu để đặt các siêu âm, vì vậy chúng tôi cần kiểm tra dữ liệu thực sự mới. Chúng tôi có thể làm điều này bằng cách chạy

>>> print(iris.data.shape)
(150, 4)
>>> n_samples, n_features = iris.data.shape
>>> print(n_samples)
150
>>> print(n_features)
4
>>> print(iris.data[0])
[5.1  3.5  1.4  0.2]
29 trên các đối tượng CV của chúng tôi. Ở đây có 2 vòng xác thực chéo đang diễn ra, điều này được gọi là xác thực chéo lồng nhau:

>>> print(iris.target_names)
['setosa' 'versicolor' 'virginica']
9

Ghi chú

Lưu ý rằng những kết quả này không phù hợp với kết quả tốt nhất của các đường cong của chúng tôi ở trên và

>>> print(iris.data.shape)
(150, 4)
>>> n_samples, n_features = iris.data.shape
>>> print(n_samples)
150
>>> print(n_features)
4
>>> print(iris.data[0])
[5.1  3.5  1.4  0.2]
28 dường như dưới hiệu suất
>>> print(iris.data.shape)
(150, 4)
>>> n_samples, n_features = iris.data.shape
>>> print(n_samples)
150
>>> print(n_features)
4
>>> print(iris.data[0])
[5.1  3.5  1.4  0.2]
27. Lý do là việc thiết lập tham số siêu khó hơn đối với Lasso, do đó, lỗi ước tính trên tham số siêu này lớn hơn.

3.6.6. Học tập không giám sát: Giảm kích thước và hình dung

Học tập không giám sát được áp dụng trên X mà không có y: dữ liệu không có nhãn. Một trường hợp sử dụng điển hình là tìm cấu trúc ẩn trong dữ liệu.

3.6.6.1. Giảm chiều: PCA¶

Giảm kích thước có được một tập hợp các tính năng nhân tạo mới nhỏ hơn so với bộ tính năng ban đầu. Ở đây, chúng tôi sẽ sử dụng phân tích thành phần chính (PCA), giảm kích thước cố gắng giữ lại hầu hết các phương sai của dữ liệu gốc. Chúng tôi sẽ sử dụng

>>> print(iris.data.shape)
(150, 4)
>>> n_samples, n_features = iris.data.shape
>>> print(n_samples)
150
>>> print(n_features)
4
>>> print(iris.data[0])
[5.1  3.5  1.4  0.2]
32 trên bộ dữ liệu IRIS:

>>> from sklearn.linear_model import LinearRegression
0

Mẹo

>>> print(iris.data.shape)
(150, 4)
>>> n_samples, n_features = iris.data.shape
>>> print(n_samples)
150
>>> print(n_features)
4
>>> print(iris.data[0])
[5.1  3.5  1.4  0.2]
33 Tính toán các kết hợp tuyến tính của các tính năng ban đầu bằng cách sử dụng phân tách giá trị số ít bị cắt ngắn của ma trận X, để chiếu dữ liệu lên một cơ sở của các vectơ đơn lẻ.

>>> from sklearn.linear_model import LinearRegression
1

Sau khi được trang bị,

>>> print(iris.data.shape)
(150, 4)
>>> n_samples, n_features = iris.data.shape
>>> print(n_samples)
150
>>> print(n_features)
4
>>> print(iris.data[0])
[5.1  3.5  1.4  0.2]
33 phơi bày các vectơ số ít trong thuộc tính
>>> print(iris.data.shape)
(150, 4)
>>> n_samples, n_features = iris.data.shape
>>> print(n_samples)
150
>>> print(n_features)
4
>>> print(iris.data[0])
[5.1  3.5  1.4  0.2]
35:

>>> from sklearn.linear_model import LinearRegression
2

Các thuộc tính khác cũng có sẵn:

>>> from sklearn.linear_model import LinearRegression
3

Chúng ta hãy chiếu bộ dữ liệu IRIS dọc theo hai chiều đầu tiên ::

>>> from sklearn.linear_model import LinearRegression
4

>>> print(iris.data.shape)
(150, 4)
>>> n_samples, n_features = iris.data.shape
>>> print(n_samples)
150
>>> print(n_features)
4
>>> print(iris.data[0])
[5.1  3.5  1.4  0.2]
33
>>> print(iris.data.shape)
(150, 4)
>>> n_samples, n_features = iris.data.shape
>>> print(n_samples)
150
>>> print(n_features)
4
>>> print(iris.data[0])
[5.1  3.5  1.4  0.2]
37 và
>>> print(iris.data.shape)
(150, 4)
>>> n_samples, n_features = iris.data.shape
>>> print(n_samples)
150
>>> print(n_features)
4
>>> print(iris.data[0])
[5.1  3.5  1.4  0.2]
38 Dữ liệu, có nghĩa là dữ liệu hiện được tập trung vào cả hai thành phần có phương sai đơn vị:

>>> from sklearn.linear_model import LinearRegression
5

Hơn nữa, các thành phần mẫu không còn mang bất kỳ mối tương quan tuyến tính nào:

>>> from sklearn.linear_model import LinearRegression
6

Với một số thành phần được giữ lại 2 hoặc 3, PCA rất hữu ích để trực quan hóa bộ dữ liệu:

>>> from sklearn.linear_model import LinearRegression
7

Hướng dẫn apply model to data python - áp dụng mô hình cho Python dữ liệu

Mẹo

>>> print(iris.data.shape)
(150, 4)
>>> n_samples, n_features = iris.data.shape
>>> print(n_samples)
150
>>> print(n_features)
4
>>> print(iris.data[0])
[5.1  3.5  1.4  0.2]
33 Tính toán các kết hợp tuyến tính của các tính năng ban đầu bằng cách sử dụng phân tách giá trị số ít bị cắt ngắn của ma trận X, để chiếu dữ liệu lên một cơ sở của các vectơ đơn lẻ.unsupervised. Nevertheless, we see that the projection gives us insight into the distribution of the different flowers in parameter space: notably, iris setosa is much more distinct than the other two species.

Sau khi được trang bị, >>> print(iris.data.shape) (150, 4) >>> n_samples, n_features = iris.data.shape >>> print(n_samples) 150 >>> print(n_features) 4 >>> print(iris.data[0]) [5.1 3.5 1.4 0.2] 33 phơi bày các vectơ số ít trong thuộc tính >>> print(iris.data.shape) (150, 4) >>> n_samples, n_features = iris.data.shape >>> print(n_samples) 150 >>> print(n_features) 4 >>> print(iris.data[0]) [5.1 3.5 1.4 0.2] 35:

Các thuộc tính khác cũng có sẵn:

>>> from sklearn.linear_model import LinearRegression
8

Hướng dẫn apply model to data python - áp dụng mô hình cho Python dữ liệu

fit_transform

>>> print(iris.data.shape)
(150, 4)
>>> n_samples, n_features = iris.data.shape
>>> print(n_samples)
150
>>> print(n_features)
4
>>> print(iris.data[0])
[5.1  3.5  1.4  0.2]
40 không thể được áp dụng cho dữ liệu mới, chúng tôi cần sử dụng phương thức FIT_Transform của nó.

>>> print(iris.data.shape)
(150, 4)
>>> n_samples, n_features = iris.data.shape
>>> print(n_samples)
150
>>> print(n_features)
4
>>> print(iris.data[0])
[5.1  3.5  1.4  0.2]
39 tách biệt khá tốt các lớp chữ số khác nhau mà mặc dù nó không có quyền truy cập vào thông tin lớp.

Bài tập: Giảm kích thước khác của các chữ số

>>> print(iris.data.shape)
(150, 4)
>>> n_samples, n_features = iris.data.shape
>>> print(n_samples)
150
>>> print(n_features)
4
>>> print(iris.data[0])
[5.1  3.5  1.4  0.2]
42 có nhiều nhúng phi tuyến tính khác. Hãy thử chúng trên bộ dữ liệu chữ số. Bạn có thể đánh giá chất lượng của họ mà không biết nhãn
from sklearn.linear_model import LinearRegression

# x from 0 to 30
x = 30 * np.random.random((20, 1))

# y = a*x + b with noise
y = 0.5 * x + 1.0 + np.random.normal(size=x.shape)

# create a linear regression model
model = LinearRegression()
model.fit(x, y)

# predict y from the data
x_new = np.linspace(0, 30, 100)
y_new = model.predict(x_new[:, np.newaxis])

1?

>>> from sklearn.linear_model import LinearRegression
9

3.6.8. Ví dụ về Eigenfaces: Chuỗi PCA và SVMS¶

Mục tiêu của ví dụ này là cho thấy cách một phương pháp không giám sát và một phương pháp được giám sát có thể được xích để dự đoán tốt hơn. Nó bắt đầu với một cách làm việc nhưng dài để làm mọi việc, và kết thúc với cách tiếp cận thành ngữ để đường ống ở Scikit-learn.

Ở đây chúng tôi sẽ xem xét một ví dụ nhận dạng khuôn mặt đơn giản. Lý tưởng nhất, chúng tôi sẽ sử dụng một bộ dữ liệu bao gồm một tập hợp con của các khuôn mặt được dán nhãn trong dữ liệu hoang dã có sẵn với

>>> print(iris.data.shape)
(150, 4)
>>> n_samples, n_features = iris.data.shape
>>> print(n_samples)
150
>>> print(n_features)
4
>>> print(iris.data[0])
[5.1  3.5  1.4  0.2]
44. Tuy nhiên, đây là một bản tải xuống tương đối lớn (~ 200MB) vì vậy chúng tôi sẽ thực hiện hướng dẫn trên một bộ dữ liệu đơn giản hơn, ít phong phú hơn. Hãy khám phá bộ dữ liệu LFW.

>>> model = LinearRegression(n_jobs=1, normalize=True)
>>> print(model.normalize)
True
>>> print(model)
LinearRegression(n_jobs=1, normalize=True)
0

Hãy để trực quan hóa những khuôn mặt này để xem những gì chúng tôi làm việc với

>>> model = LinearRegression(n_jobs=1, normalize=True)
>>> print(model.normalize)
True
>>> print(model)
LinearRegression(n_jobs=1, normalize=True)
1

Hướng dẫn apply model to data python - áp dụng mô hình cho Python dữ liệu

Mẹo

Lưu ý là những khuôn mặt này đã được bản địa hóa và tỷ lệ theo kích thước chung. Đây là một phần tiền xử lý quan trọng để nhận dạng khuôn mặt và là một quá trình có thể yêu cầu một bộ sưu tập lớn dữ liệu đào tạo. Điều này có thể được thực hiện trong scikit-learn, nhưng thách thức là thu thập đủ dữ liệu đào tạo cho thuật toán hoạt động. May mắn thay, mảnh này là đủ phổ biến để nó đã được thực hiện. Một tài nguyên tốt là OpenCV, Thư viện Tầm nhìn Máy tính Mở.

Chúng tôi sẽ thực hiện phân loại vector hỗ trợ của các hình ảnh. Chúng tôi sẽ thực hiện một bài kiểm tra đào tạo điển hình trên các hình ảnh:

>>> model = LinearRegression(n_jobs=1, normalize=True)
>>> print(model.normalize)
True
>>> print(model)
LinearRegression(n_jobs=1, normalize=True)
2

Out:

3.6.8.1. Tiền xử lý: Phân tích thành phần chính

1850 Kích thước là rất nhiều cho SVM. Chúng ta có thể sử dụng PCA để giảm 1850 tính năng này xuống kích thước có thể quản lý được, trong khi duy trì hầu hết các thông tin trong bộ dữ liệu.

>>> model = LinearRegression(n_jobs=1, normalize=True)
>>> print(model.normalize)
True
>>> print(model)
LinearRegression(n_jobs=1, normalize=True)
3

Một phần thú vị của PCA là nó tính toán khuôn mặt của người Hồi giáo, có thể rất thú vị để kiểm tra:

>>> model = LinearRegression(n_jobs=1, normalize=True)
>>> print(model.normalize)
True
>>> print(model)
LinearRegression(n_jobs=1, normalize=True)
4

Hướng dẫn apply model to data python - áp dụng mô hình cho Python dữ liệu

Các thành phần chính đo độ lệch về giá trị trung bình này dọc theo các trục trực giao.

>>> model = LinearRegression(n_jobs=1, normalize=True)
>>> print(model.normalize)
True
>>> print(model)
LinearRegression(n_jobs=1, normalize=True)
5

Out:

Cũng rất thú vị khi hình dung các thành phần chính này:

>>> model = LinearRegression(n_jobs=1, normalize=True)
>>> print(model.normalize)
True
>>> print(model)
LinearRegression(n_jobs=1, normalize=True)
6

Hướng dẫn apply model to data python - áp dụng mô hình cho Python dữ liệu

Các thành phần (Eigenfaces,) được đặt hàng bởi tầm quan trọng của chúng từ từ trên xuống bên trái đến dưới cùng bên phải. Chúng tôi thấy rằng một vài thành phần đầu tiên dường như chủ yếu chăm sóc các điều kiện ánh sáng; Các thành phần còn lại rút ra một số tính năng nhận dạng nhất định: mũi, mắt, lông mày, v.v.

Với phép chiếu này được tính toán, giờ đây chúng tôi có thể dự kiến ​​dữ liệu đào tạo và kiểm tra ban đầu của mình lên cơ sở PCA:

>>> model = LinearRegression(n_jobs=1, normalize=True)
>>> print(model.normalize)
True
>>> print(model)
LinearRegression(n_jobs=1, normalize=True)
7

Out:

Out:

Các thành phần dự kiến ​​này tương ứng với các yếu tố trong sự kết hợp tuyến tính của hình ảnh thành phần sao cho sự kết hợp tiếp cận khuôn mặt ban đầu.

3.6.8.2. Thực hiện việc học: Hỗ trợ máy vector

Bây giờ chúng tôi sẽ thực hiện phân loại hỗ trợ-vector-máy trên bộ dữ liệu giảm này:

>>> model = LinearRegression(n_jobs=1, normalize=True)
>>> print(model.normalize)
True
>>> print(model)
LinearRegression(n_jobs=1, normalize=True)
8

Cuối cùng, chúng ta có thể đánh giá mức độ phân loại này đã làm tốt như thế nào. Đầu tiên, chúng tôi có thể vẽ một vài trường hợp kiểm tra với các nhãn học được từ bộ đào tạo:

>>> model = LinearRegression(n_jobs=1, normalize=True)
>>> print(model.normalize)
True
>>> print(model)
LinearRegression(n_jobs=1, normalize=True)
9

Hướng dẫn apply model to data python - áp dụng mô hình cho Python dữ liệu

Trình phân loại là chính xác trên một số lượng hình ảnh ấn tượng với sự đơn giản của mô hình học tập của nó! Sử dụng trình phân loại tuyến tính trên 150 tính năng có nguồn gốc từ dữ liệu cấp độ pixel, thuật toán xác định chính xác một số lượng lớn người trong hình ảnh.

Một lần nữa, chúng ta có thể định lượng hiệu quả này bằng cách sử dụng một trong một số biện pháp từ

>>> print(iris.data.shape)
(150, 4)
>>> n_samples, n_features = iris.data.shape
>>> print(n_samples)
150
>>> print(n_features)
4
>>> print(iris.data[0])
[5.1  3.5  1.4  0.2]
05. Đầu tiên chúng ta có thể thực hiện báo cáo phân loại, cho thấy độ chính xác, thu hồi và các biện pháp khác của sự tốt lành của người Hồi giáo của phân loại:

>>> import numpy as np
>>> x = np.array([0, 1, 2])
>>> y = np.array([0, 1, 2])

>>> X = x[:, np.newaxis] # The input data for sklearn is 2D: (samples == 3 x features == 1)
>>> X
array([[0],
       [1],
       [2]])

>>> model.fit(X, y)
LinearRegression(n_jobs=1, normalize=True)
0

Out:

>>> import numpy as np
>>> x = np.array([0, 1, 2])
>>> y = np.array([0, 1, 2])

>>> X = x[:, np.newaxis] # The input data for sklearn is 2D: (samples == 3 x features == 1)
>>> X
array([[0],
       [1],
       [2]])

>>> model.fit(X, y)
LinearRegression(n_jobs=1, normalize=True)
1

Một số liệu thú vị khác là ma trận nhầm lẫn, cho thấy tần suất bất kỳ hai mục nào được trộn lẫn. Ma trận nhầm lẫn của một trình phân loại hoàn hảo sẽ chỉ có các mục khác không trên đường chéo, với số không trên đường chéo ngoài đường:

>>> import numpy as np
>>> x = np.array([0, 1, 2])
>>> y = np.array([0, 1, 2])

>>> X = x[:, np.newaxis] # The input data for sklearn is 2D: (samples == 3 x features == 1)
>>> X
array([[0],
       [1],
       [2]])

>>> model.fit(X, y)
LinearRegression(n_jobs=1, normalize=True)
2

Out:

>>> import numpy as np
>>> x = np.array([0, 1, 2])
>>> y = np.array([0, 1, 2])

>>> X = x[:, np.newaxis] # The input data for sklearn is 2D: (samples == 3 x features == 1)
>>> X
array([[0],
       [1],
       [2]])

>>> model.fit(X, y)
LinearRegression(n_jobs=1, normalize=True)
3

3.6.8.3. Đường ống

Trên đây, chúng tôi đã sử dụng PCA như một bước xử lý trước khi áp dụng phân loại máy vector hỗ trợ của chúng tôi. Cắm đầu ra của một công cụ ước tính trực tiếp vào đầu vào của công cụ ước tính thứ hai là một mẫu thường được sử dụng; Vì lý do này, Scikit-Learn cung cấp một đối tượng

>>> print(iris.data.shape)
(150, 4)
>>> n_samples, n_features = iris.data.shape
>>> print(n_samples)
150
>>> print(n_features)
4
>>> print(iris.data[0])
[5.1  3.5  1.4  0.2]
46 tự động hóa quá trình này. Vấn đề trên có thể được biểu hiện lại như một đường ống như sau:

>>> import numpy as np
>>> x = np.array([0, 1, 2])
>>> y = np.array([0, 1, 2])

>>> X = x[:, np.newaxis] # The input data for sklearn is 2D: (samples == 3 x features == 1)
>>> X
array([[0],
       [1],
       [2]])

>>> model.fit(X, y)
LinearRegression(n_jobs=1, normalize=True)
4

3.6.9. Lựa chọn, xác thực và kiểm tra tham số

3.6.9.1. Hyperparameter, quá phù hợp và không phù hợp

Các vấn đề liên quan đến xác nhận và xác thực chéo là một số khía cạnh quan trọng nhất của thực hành học máy. Chọn mô hình tối ưu cho dữ liệu của bạn là rất quan trọng và là một phần của vấn đề thường không được các học viên học máy đánh giá cao.

Câu hỏi trung tâm là: Nếu công cụ ước tính của chúng tôi hoạt động kém, chúng ta nên tiến lên phía trước như thế nào?If our estimator is underperforming, how should we move forward?

  • Sử dụng mô hình đơn giản hơn hoặc phức tạp hơn?
  • Thêm nhiều tính năng cho mỗi điểm dữ liệu quan sát được?
  • Thêm nhiều mẫu đào tạo?

Câu trả lời thường phản trực giác. Cụ thể, đôi khi sử dụng một mô hình phức tạp hơn sẽ cho kết quả tồi tệ hơn. Ngoài ra, đôi khi thêm dữ liệu đào tạo sẽ không cải thiện kết quả của bạn. Khả năng xác định những bước nào sẽ cải thiện mô hình của bạn là những gì tách biệt các học viên học máy thành công với những người không thành công.Sometimes using a more complicated model will give worse results. Also, Sometimes adding training data will not improve your results. The ability to determine what steps will improve your model is what separates the successful machine learning practitioners from the unsuccessful.

Sự đánh đổi sai lệch thiên vị: Minh họa về vấn đề hồi quy đơn giản

Hãy để chúng tôi bắt đầu với một vấn đề hồi quy 1D đơn giản. Điều này sẽ giúp chúng tôi dễ dàng trực quan hóa dữ liệu và mô hình và kết quả khái quát hóa dễ dàng cho các bộ dữ liệu chiều cao hơn. Chúng tôi sẽ khám phá một vấn đề hồi quy tuyến tính đơn giản, với

>>> print(iris.data.shape)
(150, 4)
>>> n_samples, n_features = iris.data.shape
>>> print(n_samples)
150
>>> print(n_features)
4
>>> print(iris.data[0])
[5.1  3.5  1.4  0.2]
47.linear regression problem, with
>>> print(iris.data.shape)
(150, 4)
>>> n_samples, n_features = iris.data.shape
>>> print(n_samples)
150
>>> print(n_features)
4
>>> print(iris.data[0])
[5.1  3.5  1.4  0.2]
47.

>>> import numpy as np
>>> x = np.array([0, 1, 2])
>>> y = np.array([0, 1, 2])

>>> X = x[:, np.newaxis] # The input data for sklearn is 2D: (samples == 3 x features == 1)
>>> X
array([[0],
       [1],
       [2]])

>>> model.fit(X, y)
LinearRegression(n_jobs=1, normalize=True)
5

Không có tiếng ồn, vì hồi quy tuyến tính phù hợp hoàn hảo với dữ liệu

>>> import numpy as np
>>> x = np.array([0, 1, 2])
>>> y = np.array([0, 1, 2])

>>> X = x[:, np.newaxis] # The input data for sklearn is 2D: (samples == 3 x features == 1)
>>> X
array([[0],
       [1],
       [2]])

>>> model.fit(X, y)
LinearRegression(n_jobs=1, normalize=True)
6

Hướng dẫn apply model to data python - áp dụng mô hình cho Python dữ liệu

Trong tình huống thực tế, chúng tôi có tiếng ồn (ví dụ: tiếng ồn đo lường) trong dữ liệu của chúng tôi:

>>> import numpy as np
>>> x = np.array([0, 1, 2])
>>> y = np.array([0, 1, 2])

>>> X = x[:, np.newaxis] # The input data for sklearn is 2D: (samples == 3 x features == 1)
>>> X
array([[0],
       [1],
       [2]])

>>> model.fit(X, y)
LinearRegression(n_jobs=1, normalize=True)
7

Hướng dẫn apply model to data python - áp dụng mô hình cho Python dữ liệu

Như chúng ta có thể thấy, mô hình tuyến tính của chúng ta thu được và khuếch đại nhiễu trong dữ liệu. Nó hiển thị rất nhiều phương sai.

Chúng ta có thể sử dụng một công cụ ước tính tuyến tính khác sử dụng công cụ ước tính

>>> print(iris.data.shape)
(150, 4)
>>> n_samples, n_features = iris.data.shape
>>> print(n_samples)
150
>>> print(n_features)
4
>>> print(iris.data[0])
[5.1  3.5  1.4  0.2]
23. Công cụ ước tính này thường xuyên hóa các hệ số bằng cách thu nhỏ chúng xuống 0, theo giả định rằng các mối tương quan rất cao thường là giả mạo. Tham số alpha kiểm soát lượng co rút được sử dụng.

>>> import numpy as np
>>> x = np.array([0, 1, 2])
>>> y = np.array([0, 1, 2])

>>> X = x[:, np.newaxis] # The input data for sklearn is 2D: (samples == 3 x features == 1)
>>> X
array([[0],
       [1],
       [2]])

>>> model.fit(X, y)
LinearRegression(n_jobs=1, normalize=True)
8

Hướng dẫn apply model to data python - áp dụng mô hình cho Python dữ liệu

Như chúng ta có thể thấy, công cụ ước tính hiển thị ít phương sai hơn. Tuy nhiên, nó có hệ thống đánh giá thấp hệ số. Nó hiển thị một hành vi thiên vị.

Đây là một ví dụ điển hình về sự đánh đổi sai lệch/phương sai: công cụ ước tính không thường xuyên không bị sai lệch, nhưng chúng có thể hiển thị rất nhiều phương sai. Các mô hình được điều chỉnh cao có ít phương sai, nhưng sai lệch cao. Sự thiên vị này không nhất thiết là một điều xấu: điều quan trọng là lựa chọn sự đánh đổi giữa thiên vị và phương sai dẫn đến hiệu suất dự đoán tốt nhất. Đối với một bộ dữ liệu cụ thể, có một điểm ngọt tương ứng với độ phức tạp cao nhất mà dữ liệu có thể hỗ trợ, tùy thuộc vào lượng tiếng ồn và các quan sát có sẵn.bias/variance tradeof: non-regularized estimator are not biased, but they can display a lot of variance. Highly-regularized models have little variance, but high bias. This bias is not necessarily a bad thing: what matters is choosing the tradeoff between bias and variance that leads to the best prediction performance. For a specific dataset there is a sweet spot corresponding to the highest complexity that the data can support, depending on the amount of noise and of observations available.

3.6.9.2. Hình dung sự đánh đổi sai lệch/phương sai

Mẹo

Đưa ra một bộ dữ liệu cụ thể và một mô hình (ví dụ: một đa thức), chúng tôi muốn hiểu liệu dự đoán của thiên vị (nội dung) hay phương sai giới hạn và cách điều chỉnh siêu đồng tính (ở đây

>>> print(iris.data.shape)
(150, 4)
>>> n_samples, n_features = iris.data.shape
>>> print(n_samples)
150
>>> print(n_features)
4
>>> print(iris.data[0])
[5.1  3.5  1.4  0.2]
49, mức độ của đa thức) để phù hợp nhất với .

Trên một dữ liệu nhất định, chúng ta hãy phù hợp với mô hình hồi quy đa thức đơn giản với các mức độ khác nhau:

Hướng dẫn apply model to data python - áp dụng mô hình cho Python dữ liệu

Mẹo

Đưa ra một bộ dữ liệu cụ thể và một mô hình (ví dụ: một đa thức), chúng tôi muốn hiểu liệu dự đoán của thiên vị (nội dung) hay phương sai giới hạn và cách điều chỉnh siêu đồng tính (ở đây

>>> print(iris.data.shape)
(150, 4)
>>> n_samples, n_features = iris.data.shape
>>> print(n_samples)
150
>>> print(n_features)
4
>>> print(iris.data[0])
[5.1  3.5  1.4  0.2]
49, mức độ của đa thức) để phù hợp nhất với .

Trên một dữ liệu nhất định, chúng ta hãy phù hợp với mô hình hồi quy đa thức đơn giản với các mức độ khác nhau:

Trong hình trên, chúng ta thấy phù hợp với ba giá trị khác nhau của

>>> print(iris.data.shape)
(150, 4)
>>> n_samples, n_features = iris.data.shape
>>> print(n_samples)
150
>>> print(n_features)
4
>>> print(iris.data[0])
[5.1  3.5  1.4  0.2]
49. Đối với
>>> print(iris.data.shape)
(150, 4)
>>> n_samples, n_features = iris.data.shape
>>> print(n_samples)
150
>>> print(n_features)
4
>>> print(iris.data[0])
[5.1  3.5  1.4  0.2]
51, dữ liệu không phù hợp. Điều này có nghĩa là mô hình quá đơn giản: không có đường thẳng nào phù hợp với dữ liệu này. Trong trường hợp này, chúng tôi nói rằng mô hình bị sai lệch cao. Bản thân mô hình này là sai lệch, và điều này sẽ được phản ánh trong thực tế là dữ liệu rất phù hợp. Ở cực điểm khác, đối với
>>> print(iris.data.shape)
(150, 4)
>>> n_samples, n_features = iris.data.shape
>>> print(n_samples)
150
>>> print(n_features)
4
>>> print(iris.data[0])
[5.1  3.5  1.4  0.2]
52, dữ liệu là quá mức. Điều này có nghĩa là mô hình có quá nhiều tham số miễn phí (6 trong trường hợp này) có thể được điều chỉnh để hoàn toàn phù hợp với dữ liệu đào tạo. Tuy nhiên, nếu chúng ta thêm một điểm mới cho cốt truyện này, rất có thể nó sẽ rất xa đường cong thể hiện mức độ phù hợp với mức độ 6. Trong trường hợp này, chúng tôi nói rằng mô hình bị phương sai cao. Lý do cho thuật ngữ phương sai cao, là nếu bất kỳ điểm đầu vào nào thay đổi một chút, nó có thể dẫn đến một mô hình rất khác.

Ở giữa, đối với

>>> print(iris.data.shape)
(150, 4)
>>> n_samples, n_features = iris.data.shape
>>> print(n_samples)
150
>>> print(n_features)
4
>>> print(iris.data[0])
[5.1  3.5  1.4  0.2]
53, chúng tôi đã tìm thấy một điểm giữa tốt. Nó phù hợp với dữ liệu khá tốt, và không phải chịu các vấn đề sai lệch và phương sai được thấy trong các hình ở hai bên. Những gì chúng tôi muốn là một cách để xác định định lượng sự thiên vị và phương sai, và tối ưu hóa các metaparameter (trong trường hợp này, mức độ đa thức D) để xác định thuật toán tốt nhất.

>>> import numpy as np
>>> x = np.array([0, 1, 2])
>>> y = np.array([0, 1, 2])

>>> X = x[:, np.newaxis] # The input data for sklearn is 2D: (samples == 3 x features == 1)
>>> X
array([[0],
       [1],
       [2]])

>>> model.fit(X, y)
LinearRegression(n_jobs=1, normalize=True)
9

Hồi quy đa thức với học tập Scikit

Một hồi quy đa thức được xây dựng bằng đường ống

>>> print(iris.data.shape)
(150, 4)
>>> n_samples, n_features = iris.data.shape
>>> print(n_samples)
150
>>> print(n_features)
4
>>> print(iris.data[0])
[5.1  3.5  1.4  0.2]
54 và
>>> print(iris.data.shape)
(150, 4)
>>> n_samples, n_features = iris.data.shape
>>> print(n_samples)
150
>>> print(n_features)
4
>>> print(iris.data[0])
[5.1  3.5  1.4  0.2]
09:

Đường cong xác nhận

Hướng dẫn apply model to data python - áp dụng mô hình cho Python dữ liệu

Hãy để chúng tôi tạo một bộ dữ liệu như trong ví dụ trên:

>>> model.coef_
array([1.])
1

>>> model.coef_
array([1.])
0 A validation curve consists in varying a model parameter that controls its complexity (here the degree of the polynomial) and measures both error of the model on training data, and on test data (eg with cross-validation). The model parameter is then adjusted so that the test error is minimized:

Trung tâm để định lượng sự thiên vị và phương sai của mô hình là áp dụng nó trên dữ liệu thử nghiệm, được lấy mẫu từ cùng một phân phối với tàu, nhưng điều đó sẽ thu được tiếng ồn độc lập:

>>> model.coef_
array([1.])
2

Hướng dẫn apply model to data python - áp dụng mô hình cho Python dữ liệu

Đường cong xác thực Một đường cong xác thực bao gồm thay đổi tham số mô hình kiểm soát độ phức tạp của nó (ở đây mức độ của đa thức) và đo cả hai lỗi của mô hình trên dữ liệu đào tạo và trên dữ liệu kiểm tra (ví dụ: xác thực chéo). Tham số mô hình sau đó được điều chỉnh để giảm thiểu lỗi kiểm tra:

Mẹo

Người đọc sắc sảo sẽ nhận ra rằng một cái gì đó không ổn ở đây: Trong cốt truyện trên,

>>> print(iris.data.shape)
(150, 4)
>>> n_samples, n_features = iris.data.shape
>>> print(n_samples)
150
>>> print(n_features)
4
>>> print(iris.data[0])
[5.1  3.5  1.4  0.2]
58 cho kết quả tốt nhất. Nhưng trong cốt truyện trước, chúng tôi thấy rằng
>>> print(iris.data.shape)
(150, 4)
>>> n_samples, n_features = iris.data.shape
>>> print(n_samples)
150
>>> print(n_features)
4
>>> print(iris.data[0])
[5.1  3.5  1.4  0.2]
52 rất phù hợp với dữ liệu. Những gì đang xảy ra ở đây? Sự khác biệt là số lượng điểm đào tạo được sử dụng. Trong ví dụ trước, chỉ có tám điểm đào tạo. Trong ví dụ này, chúng tôi có 100. Như một nguyên tắc chung, các điểm đào tạo được sử dụng nhiều hơn, mô hình phức tạp hơn có thể được sử dụng. Nhưng làm thế nào bạn có thể xác định cho một mô hình nhất định xem có nhiều điểm đào tạo sẽ hữu ích không? Một chẩn đoán hữu ích cho điều này là các đường cong học tập.number of training points used. In the previous example, there were only eight training points. In this example, we have 100. As a general rule of thumb, the more training points used, the more complicated model can be used. But how can you determine for a given model whether more training points will be helpful? A useful diagnostic for this are learning curves.

Đường cong học tập

Một đường cong học tập cho thấy điểm đào tạo và xác nhận là một chức năng của số lượng điểm đào tạo. Lưu ý rằng khi chúng tôi đào tạo trên một tập hợp con của dữ liệu đào tạo, điểm đào tạo được tính toán bằng cách sử dụng tập hợp con này, chứ không phải bộ đào tạo đầy đủ. Đường cong này đưa ra một cái nhìn định lượng về mức độ có lợi của việc thêm các mẫu đào tạo.

Questions:

  • Khi số lượng mẫu đào tạo được tăng lên, bạn mong đợi điều gì cho điểm đào tạo? Cho điểm xác nhận?
  • Bạn có mong đợi điểm đào tạo sẽ cao hơn hoặc thấp hơn điểm xác nhận không? Bạn có bao giờ mong đợi điều này sẽ thay đổi?

from sklearn import neighbors, datasets
iris = datasets.load_iris()
X, y = iris.data, iris.target
knn = neighbors.KNeighborsClassifier(n_neighbors=1)
knn.fit(X, y)
# What kind of iris has 3cm x 5cm sepal and 4cm x 2cm petal?
print(iris.target_names[knn.predict([[3, 5, 4, 2]])])
2 cung cấp
>>> print(iris.data.shape)
(150, 4)
>>> n_samples, n_features = iris.data.shape
>>> print(n_samples)
150
>>> print(n_features)
4
>>> print(iris.data[0])
[5.1  3.5  1.4  0.2]
61:

>>> model.coef_
array([1.])
3

Hướng dẫn apply model to data python - áp dụng mô hình cho Python dữ liệu

Đối với mô hình

>>> print(iris.data.shape)
(150, 4)
>>> n_samples, n_features = iris.data.shape
>>> print(n_samples)
150
>>> print(n_features)
4
>>> print(iris.data[0])
[5.1  3.5  1.4  0.2]
62

Lưu ý rằng điểm xác nhận thường tăng lên với bộ đào tạo đang phát triển, trong khi điểm đào tạo thường giảm với bộ đào tạo đang phát triển. Khi kích thước đào tạo tăng, chúng sẽ hội tụ đến một giá trị duy nhất.

Từ các cuộc thảo luận ở trên, chúng tôi biết rằng

>>> print(iris.data.shape)
(150, 4)
>>> n_samples, n_features = iris.data.shape
>>> print(n_samples)
150
>>> print(n_features)
4
>>> print(iris.data[0])
[5.1  3.5  1.4  0.2]
51 là công cụ ước tính thiên vị cao phù hợp với dữ liệu. Điều này được chỉ định bởi thực tế là cả điểm đào tạo và xác nhận đều thấp. Khi đối mặt với loại đường cong học tập này, chúng ta có thể hy vọng rằng việc thêm dữ liệu đào tạo sẽ không giúp ích gì: cả hai dòng đều hội tụ đến điểm tương đối thấp.

Khi các đường cong học tập đã hội tụ đến điểm thấp, chúng tôi có một mô hình thiên vị cao.

Một mô hình thiên vị cao có thể được cải thiện bằng cách:

  • Sử dụng một mô hình tinh vi hơn (nghĩa là trong trường hợp này, tăng
    >>> print(iris.data.shape)
    (150, 4)
    >>> n_samples, n_features = iris.data.shape
    >>> print(n_samples)
    150
    >>> print(n_features)
    4
    >>> print(iris.data[0])
    [5.1  3.5  1.4  0.2]
    
    49)
  • Thu thập thêm các tính năng cho mỗi mẫu.
  • Giảm chính quy trong một mô hình chính quy.

Tuy nhiên, việc tăng số lượng mẫu không cải thiện mô hình thiên vị cao.

Bây giờ, hãy để Lôi nhìn vào một mô hình biến thể cao (tức là vượt quá):

Hướng dẫn apply model to data python - áp dụng mô hình cho Python dữ liệu

Đối với mô hình

>>> print(iris.data.shape)
(150, 4)
>>> n_samples, n_features = iris.data.shape
>>> print(n_samples)
150
>>> print(n_features)
4
>>> print(iris.data[0])
[5.1  3.5  1.4  0.2]
65

Ở đây chúng tôi hiển thị đường cong học tập cho

>>> print(iris.data.shape)
(150, 4)
>>> n_samples, n_features = iris.data.shape
>>> print(n_samples)
150
>>> print(n_features)
4
>>> print(iris.data[0])
[5.1  3.5  1.4  0.2]
66. Từ các cuộc thảo luận ở trên, chúng tôi biết rằng
>>> print(iris.data.shape)
(150, 4)
>>> n_samples, n_features = iris.data.shape
>>> print(n_samples)
150
>>> print(n_features)
4
>>> print(iris.data[0])
[5.1  3.5  1.4  0.2]
66 là một công cụ ước tính biến thể cao, phù hợp với dữ liệu. Điều này được chỉ định bởi thực tế là điểm đào tạo cao hơn nhiều so với điểm xác nhận. Khi chúng tôi thêm nhiều mẫu vào bộ đào tạo này, điểm đào tạo sẽ tiếp tục giảm, trong khi lỗi xác thực chéo sẽ tiếp tục tăng, cho đến khi chúng gặp nhau ở giữa.high-variance estimator which over-fits the data. This is indicated by the fact that the training score is much higher than the validation score. As we add more samples to this training set, the training score will continue to decrease, while the cross-validation error will continue to increase, until they meet in the middle.

Các đường cong học tập chưa được hội tụ với bộ đào tạo đầy đủ cho thấy một mô hình biến đổi cao, phù hợp.

Một mô hình biến thể cao có thể được cải thiện bằng cách:

  • Thu thập thêm các mẫu đào tạo.
  • Sử dụng mô hình ít tinh vi hơn (nghĩa là trong trường hợp này, làm cho
    >>> print(iris.data.shape)
    (150, 4)
    >>> n_samples, n_features = iris.data.shape
    >>> print(n_samples)
    150
    >>> print(n_features)
    4
    >>> print(iris.data[0])
    [5.1  3.5  1.4  0.2]
    
    49 nhỏ hơn)
  • Tăng chính quy hóa.

Cụ thể, thu thập nhiều tính năng hơn cho mỗi mẫu sẽ không giúp kết quả.

3.6.9.3. Tóm tắt về lựa chọn mô hình

Chúng tôi đã thấy ở trên rằng một thuật toán dưới hiệu suất có thể là do hai tình huống có thể có: độ lệch cao (phù hợp) và phương sai cao (phù hợp quá mức). Để đánh giá thuật toán của chúng tôi, chúng tôi dành một phần dữ liệu đào tạo của chúng tôi để xác thực chéo. Sử dụng kỹ thuật các đường cong học tập, chúng tôi có thể đào tạo các tập hợp dữ liệu lớn hơn dần dần, đánh giá lỗi đào tạo và lỗi xác thực chéo để xác định xem thuật toán của chúng tôi có phương sai cao hay sai lệch cao. Nhưng chúng ta làm gì với thông tin này?

Xu hướng cao

Nếu một mô hình hiển thị độ lệch cao, các hành động sau đây có thể giúp ích:bias, the following actions might help:

  • Thêm nhiều tính năng. Trong ví dụ của chúng tôi về việc dự đoán giá nhà, có thể hữu ích khi sử dụng thông tin như khu phố mà ngôi nhà được xây dựng, kích thước của lô, v.v. Thêm các tính năng này vào các bộ đào tạo và thử nghiệm có thể cải thiện công cụ ước tính thiên vị cao. In our example of predicting home prices, it may be helpful to make use of information such as the neighborhood the house is in, the year the house was built, the size of the lot, etc. Adding these features to the training and test sets can improve a high-bias estimator
  • Sử dụng một mô hình tinh vi hơn. Thêm sự phức tạp vào mô hình có thể giúp cải thiện sự thiên vị. Đối với sự phù hợp đa thức, điều này có thể được thực hiện bằng cách tăng mức độ d. Mỗi kỹ thuật học tập có các phương pháp riêng để thêm độ phức tạp.. Adding complexity to the model can help improve on bias. For a polynomial fit, this can be accomplished by increasing the degree d. Each learning technique has its own methods of adding complexity.
  • Sử dụng ít mẫu hơn. Mặc dù điều này sẽ không cải thiện phân loại, một thuật toán thiên vị cao có thể đạt được gần như cùng một lỗi với một mẫu đào tạo nhỏ hơn. Đối với các thuật toán rất tốn kém về mặt tính toán, việc giảm kích thước mẫu đào tạo có thể dẫn đến những cải thiện rất lớn về tốc độ.. Though this will not improve the classification, a high-bias algorithm can attain nearly the same error with a smaller training sample. For algorithms which are computationally expensive, reducing the training sample size can lead to very large improvements in speed.
  • Giảm chính quy hóa. Chính quy hóa là một kỹ thuật được sử dụng để áp đặt sự đơn giản trong một số mô hình học máy, bằng cách thêm một thuật ngữ hình phạt phụ thuộc vào các đặc điểm của các tham số. Nếu một mô hình có độ lệch cao, việc giảm ảnh hưởng của chính quy hóa có thể dẫn đến kết quả tốt hơn.. Regularization is a technique used to impose simplicity in some machine learning models, by adding a penalty term that depends on the characteristics of the parameters. If a model has high bias, decreasing the effect of regularization can lead to better results.

Phương sai cao

Nếu một mô hình hiển thị phương sai cao, các hành động sau đây có thể giúp:high variance, the following actions might help:

  • Sử dụng ít tính năng hơn. Sử dụng một kỹ thuật lựa chọn tính năng có thể hữu ích và giảm quá mức của công cụ ước tính.. Using a feature selection technique may be useful, and decrease the over-fitting of the estimator.
  • Sử dụng một mô hình đơn giản hơn. Mô hình phức tạp và phù hợp với tay trong tay.. Model complexity and over-fitting go hand-in-hand.
  • Sử dụng nhiều mẫu đào tạo hơn. Thêm các mẫu đào tạo có thể làm giảm hiệu quả của việc phù hợp quá mức và dẫn đến những cải tiến trong công cụ ước tính phương sai cao.. Adding training samples can reduce the effect of over-fitting, and lead to improvements in a high variance estimator.
  • Tăng chính quy hóa. Chính quy hóa được thiết kế để ngăn chặn quá mức. Trong một mô hình biến thể cao, việc tăng chính quy hóa có thể dẫn đến kết quả tốt hơn.. Regularization is designed to prevent over-fitting. In a high-variance model, increasing regularization can lead to better results.

Những lựa chọn này trở nên rất quan trọng trong các tình huống trong thế giới thực. Ví dụ, do thời gian kính viễn vọng hạn chế, các nhà thiên văn học phải tìm kiếm sự cân bằng giữa việc quan sát một số lượng lớn các đối tượng và quan sát một số lượng lớn các tính năng cho mỗi đối tượng. Việc xác định cái nào quan trọng hơn đối với một nhiệm vụ học tập cụ thể có thể thông báo cho chiến lược quan sát mà nhà thiên văn học sử dụng.

3.6.9.4. Một lời cảnh báo cuối cùng: Xác thực và kiểm tra riêng biệt

Sử dụng các sơ đồ xác thực để xác định các tham số siêu có nghĩa là chúng tôi đang lắp các tham số siêu vào tập xác thực cụ thể. Theo cùng một cách mà các tham số có thể phù hợp với tập huấn luyện, siêu âm có thể phù hợp với tập xác thực. Do đó, lỗi xác thực có xu hướng dự đoán lỗi phân loại của dữ liệu mới.

Vì lý do này, nên chia dữ liệu thành ba bộ:

  • Bộ đào tạo, được sử dụng để đào tạo mô hình (thường là ~ 60% dữ liệu)training set, used to train the model (usually ~60% of the data)
  • Tập xác thực, được sử dụng để xác nhận mô hình (thường là ~ 20% dữ liệu)validation set, used to validate the model (usually ~20% of the data)
  • Bộ thử nghiệm, được sử dụng để đánh giá lỗi dự kiến ​​của mô hình được xác thực (thường là ~ 20% dữ liệu)test set, used to evaluate the expected error of the validated model (usually ~20% of the data)

Nhiều học viên học máy không phân tách bộ kiểm tra và bộ xác nhận. Nhưng nếu mục tiêu của bạn là đánh giá lỗi của một mô hình trên dữ liệu chưa biết, việc sử dụng bộ kiểm tra độc lập là rất quan trọng.

Làm thế nào để bạn thực hiện một mô hình trong Python?

Làm thế nào để xây dựng một mô hình dự đoán trong Python ?..
Bước 1: Nhập thư viện Python. Đầu tiên và quan trọng nhất, nhập các thư viện Python cần thiết. ....
Bước 2: Đọc tập dữ liệu. ....
Bước 3: Khám phá bộ dữ liệu. ....
Bước 3: Lựa chọn tính năng. ....
Bước 4: Xây dựng mô hình. ....
Bước 5: Đánh giá hiệu suất của mô hình ..

Dự đoán () trong Python là gì?

Phương pháp SKLearn 'Dự đoán' dự đoán Scikit Learn đầu ra là một bộ công cụ học máy cho Python.Đó là trường hợp, nó cung cấp một bộ công cụ để thực hiện những việc như đào tạo và đánh giá các mô hình học máy.Predicts an Output Scikit learn is a machine learning toolkit for Python. That being the case, it provides a set of tools for doing things like training and evaluating machine learning models.

Làm thế nào để bạn kiểm tra một mô hình mới cho dữ liệu?

Quá trình này chia thành bảy bước ...
Tạo các bộ dữ liệu phát triển, xác thực và thử nghiệm.....
Sử dụng bộ dữ liệu đào tạo để phát triển mô hình của bạn.....
Tính toán các giá trị thống kê Xác định hiệu suất phát triển mô hình.....
Tính kết quả mô hình vào các điểm dữ liệu trong tập dữ liệu xác thực ..

Làm thế nào để bạn phù hợp với một mô hình hồi quy trong Python?

Làm thế nào để phù hợp với mô hình hồi quy tuyến tính trong Python ?..
Hồi quy tuyến tính là gì?.
Bước 1: Đọc tập dữ liệu ..
Bước 2: Đặt mục tiêu và hồi quy ..
Bước 3: Mô hình hồi quy tuyến tính phù hợp và kết quả dự đoán ..
Bước 4: Nhìn vào sự thay đổi được giải thích bởi bộ hồi quy ..