python 分类变量回归_极简Python带你探索分类与回归的奥秘
為何使用人工智能和機器學習?
地球的未來在于人工智能和機器學習。如果對這些技術一無所知,人們很快會發現自己落伍了。世界發展日新月異,每天都發生著不可思議的變化。在人工智能和機器學習中,有許多實現和技術能夠解決實時問題。其中,監督學習是最常用的方法之一。「人工智能的關鍵在于表示?!埂狫eff Hawkins
什么是監督學習?
在監督學習中,我們首先導入包含訓練屬性和目標屬性的數據集。監督學習算法將學習訓練樣本和其目標變量之間的關系,然后應用習得的關系對無目標屬性的全新輸入進行預測。
為了闡明監督學習如何工作,讓我們考慮一個案例:根據學生的學習時長預測學生的成績。
數學公式如下:
Y = f(X)+ C
其中,F 代表學生準備考試的時長與考試分數之間的關系。X 是輸入(學習時長),Y 是輸出(學生在考試中的得分),C 代表隨機誤差。
監督學習算法的最終目標是:給定新輸入 X 時以最大的準確率預測 Y 的值。有幾種方法都可以實現監督學習,我們將探索其中一些最常用的方法。
基于給定的數據集,機器學習問題將分為兩類:分類和回歸。如果給定數據同時具有輸入(訓練)值和輸出標簽,那么它屬于分類問題。如果數據集有著連續數值屬性而沒有任何目標標簽,那么它屬于回歸問題。Classification: Has the output label. Is it a Cat or Dog?
Regression: How much will the house sell for?
分類問題
讓我們來舉例說明。一名醫學研究者希望通過分析乳腺癌數據來預測患者應該接受三種治療方式中的哪一種。這個數據分析任務屬于分類,其中構建的模型或分類器需要預測類別的標簽,比如「療法 1」、「療法 2」、「療法 3」。
分類問題預測離散且無序的類別標簽。這個過程分兩個階段:學習階段、分類階段。
分類方法以及如何選擇最合適的方法
最常用的算法包括:
1. K 近鄰
2. 決策樹
3. 樸素貝葉斯
4. 支持向量機
在學習階段,分類模型通過分析訓練集來構建分類器。在分類階段,模型會預測出給定數據的類別標簽。被分析的數據集元組及其相關類別標簽被分隔成訓練集和測試集。我們從要分析的數據集中隨機抽取部分元組構成訓練集。剩下的數據自然就是測試集了,且二者相互獨立,也就是說測試集不參與訓練過程。
測試集用于評估分類器的預測準確率。分類器的準確率指分類器在測試集中作出正確預測的百分比。為了達到更高的準確率,最好的方法是測試不同的算法并針對每一種算法進行調參。最后通過交叉驗證可以找出最佳分類器。
為了給任務選擇一個好的算法,我們必須考慮不同算法的準確率、訓練時間、線性度、參數數量及特殊情況。
下面我們將運用 Scikit-Learn 在 IRIS 數據集上實現 KNN 算法,并根據給定輸入預測花的種類。
首先,我們需要深入理解、探索給定數據集,這樣才能應用機器學習算法。在本例中,我們使用了從 scikit-learn 導入的 IRIS 數據集。接下來我們邊看代碼邊分析數據集。
請確保你的電腦上已經安裝了 Python。然后,請使用 PIP 安裝如下程序包:pip install pandas
pip install matplotlib
pip install scikit-learn
在下面的代碼片段中,我們調用幾個 Pandas 中的方法來了解 IRIS 數據集的屬性。from sklearn import datasets
import pandas as pd
import matplotlib.pyplot as plt
# Loading IRIS dataset from scikit-learn object into iris variable.
iris = datasets.load_iris()
# Prints the type/type object of iris
print(type(iris))
#
# prints the dictionary keys of iris data
print(iris.keys())
# prints the type/type object of given attributes
print(type(iris.data), type(iris.target))
# prints the no of rows and columns in the dataset
print(iris.data.shape)
# prints the target set of the data
print(iris.target_names)
# Load iris training dataset
X = iris.data
# Load iris target set
Y = iris.target
# Convert datasets' type into dataframe
df = pd.DataFrame(X, columns=iris.feature_names)
# Print the first five tuples of dataframe.
print(df.head())
輸出:
dict_keys([‘data’, ‘target’, ‘target_names’, ‘DESCR’, ‘feature_names’])]
(150, 4)
[‘setosa’ ‘versicolor’ ‘virginica’]
sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)
0 5.1 3.5 1.4 0.2
1 4.9 3.0 1.4 0.2
2 4.7 3.2 1.3 0.2
3 4.6 3.1 1.5 0.2
4 5.0 3.6 1.4 0.2
scikit-learn 中 的 K 近鄰算法
如果一個算法只保存訓練集的元組,待收到測試元組后再進行處理,那么它就是懶惰學習算法(Lazy Learner )。該算法只有收到測試數據時才執行泛化,基于測試數據與已保存的訓練數據的相似性進行分類。
K 近鄰分類器就是一種懶惰學習算法。
KNN 基于類比學習。所謂類比學習,就是通過比較給定的測試元組和與其相似的訓練元組來學習。訓練元組由 n 個屬性來描述。每一個元組表示 n 維空間中的一個點。如此一來,所有的訓練元組都保存在 n 維模式空間中。當輸入未知元組時,k 近鄰分類器在模式空間中搜索最接近未知元組的 k 個訓練元組。這 k 個訓練元組就是未知元組的 k 個「最近鄰」。
「親密度」由距離度量定義,例如歐式距離。合適的 K 值根據實驗而定。
在下面的代碼片段中,我們從 sklearn 中導入 KNN 分類器,將其用于我們的輸入數據,之后用于對花進行分類。from sklearn import datasets
from sklearn.neighbors import KNeighborsClassifier
# Load iris dataset from sklearn
iris = datasets.load_iris()
# Declare an of the KNN classifier class with the value with neighbors.
knn = KNeighborsClassifier(n_neighbors=6)
# Fit the model with training data and target values
knn.fit(iris['data'], iris['target'])
# Provide data whose class labels are to be predicted
X = [
[5.9, 1.0, 5.1, 1.8],
[3.4, 2.0, 1.1, 4.8],
]
# Prints the data provided
print(X)
# Store predicted class labels of X
prediction = knn.predict(X)
# Prints the predicted class labels of X
print(prediction)
輸出:[1 1]
這里,0 對應 Versicolor(雜色鳶尾)、1 對應 Virginica(維吉尼亞鳶尾)、2 對應 Setosa(山鳶尾)。基于給定輸入,使用 KNN 分類器,兩張圖中的花都被預測為 Versicolor。
用于 IRIS 數據集分類的 KNN 算法直觀圖
回歸
我們通常將確定兩個或多個變量之間關系的過程叫做回歸。例如,通過給定的輸入數據 X 來預測某人的收入。
這里的目標變量是我們要預測的未知變量,連續性指的是 Y 值之間不存在間隙(間斷)。
預測收入是一個經典的回歸問題。你的輸入數據應包括所有可用于預測收入的信息(也叫特征),例如工作時長、教育程度、職位、住所等。
回歸模型
最常用的回歸模型如下:線性回歸
Logistic 回歸
多項式回歸
線性回歸使用最佳擬合直線(即回歸線)在因變量 Y 和一或多個自變量 X 之間建立關聯。
數學公式如下:h(xi) = βo + β1 * xi + e
其中 βo 代表截距,β1 代表回歸線的斜率,e 是誤差項。
圖形表示如下:
Logistic 回歸算法應用在因變量屬于某一類別的情況。Logistic 回歸的思想是找出特征與特定輸出概率之間的關系。
數學公式如下:p(X) = βo + β1 * X
其中,p(x) = p(y = 1 | x)。該函數的圖形表示如下:
多項式回歸是回歸分析的一種形式。以 x 的 n 次多項式形式對自變量 x 和因變量 y 之間的關系進行建模。
解決線性回歸問題
對于數據集 X 及對應的目標值 Y,我們使用普通最小二乘法訓練一個線性模型。通過這個模型,我們可以以盡可能小的誤差來預測給定未知輸入 x 的輸出值 y。
給定數據被分隔成訓練集和測試集。訓練集是有標注的(已加載特征值),因此該算法可以從這些標注樣本中學習。測試集沒有標注,即你不知道要預測的值。
我們以要訓練的一個特征為例,運用線性回歸擬合訓練集,然后使用測試集進行預測。
在 scikit-learn 中實現線性回歸from sklearn import datasets, linear_model
import matplotlib.pyplot as plt
import numpy as np
# Load the diabetes dataset
diabetes = datasets.load_diabetes()
# Use only one feature for training
diabetes_X = diabetes.data[:, np.newaxis, 2]
# Split the data into training/testing sets
diabetes_X_train = diabetes_X[:-20]
diabetes_X_test = diabetes_X[-20:]
# Split the targets into training/testing sets
diabetes_y_train = diabetes.target[:-20]
diabetes_y_test = diabetes.target[-20:]
# Create linear regression object
regr = linear_model.LinearRegression()
# Train the model using the training sets
regr.fit(diabetes_X_train, diabetes_y_train)
# Input data
print('Input Values')
print(diabetes_X_test)
# Make predictions using the testing set
diabetes_y_pred = regr.predict(diabetes_X_test)
# Predicted Data
print("Predicted Output Values")
print(diabetes_y_pred)
# Plot outputs
plt.scatter(diabetes_X_test, diabetes_y_test, color='black')
plt.plot(diabetes_X_test, diabetes_y_pred, color='red', linewidth=1)
plt.show()
輸出:Input Values
[
[ 0.07786339] ?[-0.03961813] ?[ 0.01103904] ?[-0.04069594] ? ?[-0.03422907] ?[ 0.00564998] ?[ 0.08864151] ?[-0.03315126] [-0.05686312] ?[-0.03099563] ?[ 0.05522933] ?[-0.06009656]
[ 0.00133873] ?[-0.02345095] ?[-0.07410811] ?[ 0.01966154][-0.01590626] ?[-0.01590626] ?[ 0.03906215] ?[-0.0730303 ]
]
Predicted Output Values
[
225.9732401 ? 115.74763374 ?163.27610621 ?114.73638965 ? 120.80385422 ?158.21988574 ?236.08568105 ?121.81509832
99.56772822 ? 123.83758651 ?204.73711411 ? 96.53399594
154.17490936 ?130.91629517 ? 83.3878227 ? 171.36605897
137.99500384 ?137.99500384 ?189.56845268 ? 84.3990668
]
undefined
Graph between (diabetes_X_test, diabetes_y_pred) predictions will be continuous on the line equation.
(diabetes_X_test, diabetes_y_pred) 預測圖是線性且連續的。
(diabetes_X_test, diabetes_y_pred) 預測圖是線性且連續的。
總結
以上是生活随笔為你收集整理的python 分类变量回归_极简Python带你探索分类与回归的奥秘的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 科学写作与哲学
- 下一篇: idea gui插件_给 IDEA 换了