机器学习可以大致分为三种类型:监督学习、无监督学习和其他方法。其中,监督学习主要用于分类和回归任务,而无监督学习则主要用于聚类分析。本文将介绍这三种学习方法,并演示如何使用Python库scikit-learn
来实现这些方法。
在监督学习中,算法通过已知的输入(特征)和输出(标签)来学习输入和输出之间的关系。常见的监督学习任务包括分类和回归。
分类:分类任务的目标是将输入数据划分到不同的类别中。例如,垃圾邮件识别就是一种二分类问题。我们将使用scikit-learn
中的load_wine
数据集来演示分类过程。
首先,我们需要加载数据集并将其转换为pandas
数据框:
```python import pandas as pd import numpy as np from sklearn.datasets import loadwine from sklearn.modelselection import traintestsplit from sklearn.metrics import f1_score
wine = loadwine() winedf = pd.DataFrame(wine.data, columns=wine.featurenames) winedf['TARGET'] = pd.Series(wine.target) ```
接下来,将数据集划分为训练集和测试集:
python
X_w = wine_df.drop(['TARGET'], axis=1)
y_w = wine_df['TARGET']
X_train_w, X_test_w, y_train_w, y_test_w = train_test_split(X_w, y_w, test_size=0.2)
最后,尝试不同的分类器并评估它们的性能:
```python classifiers = [ KNeighborsClassifier(3), SVC(kernel="rbf", C=0.025, probability=True), NuSVC(probability=True), DecisionTreeClassifier(), RandomForestClassifier(), AdaBoostClassifier(), GradientBoostingClassifier() ]
for classifier in classifiers: model = classifier model.fit(Xtrainw, ytrainw) ypredw = model.predict(Xtestw) print(f"{classifier}: {f1score(ytestw, ypred_w, average='weighted')}") ```
上述代码显示,随机森林分类器在本数据集上表现最好。
回归任务的目标是预测连续变量的值。我们将使用波士顿房价数据集来演示回归过程。
首先,加载数据集并将其转换为pandas
数据框:
```python from sklearn.datasets import load_boston
boston = loadboston() bostondf = pd.DataFrame(boston.data, columns=boston.featurenames) bostondf['TARGET'] = pd.Series(boston.target) ```
接着,将数据集划分为训练集和测试集:
python
X_b = boston_df.drop(['TARGET'], axis=1)
y_b = boston_df['TARGET']
X_train_b, X_test_b, y_train_b, y_test_b = train_test_split(X_b, y_b, test_size=0.2)
最后,尝试不同的回归算法并评估它们的性能:
```python regressors = [ linearmodel.Lasso(alpha=0.1), linearmodel.LinearRegression(), ElasticNetCV(alphas=None, copyX=True, cv=5, eps=0.001, fitintercept=True, l1ratio=0.5, maxiter=1000, nalphas=100, njobs=None, normalize=False, positive=False, precompute='auto', randomstate=0, selection='cyclic', tol=0.0001, verbose=0), SVR(C=1.0, cachesize=200, coef0=0.0, degree=3, epsilon=0.1, gamma='autodeprecated', kernel='rbf', maxiter=-1, shrinking=True, tol=0.001, verbose=False), linear_model.Ridge(alpha=.5) ]
for regressor in regressors: model = regressor model.fit(Xtrainb, ytrainb) ypredb = model.predict(Xtestb) print(f"{regressor}: {sqrt(meansquarederror(ytestb, ypredb))}") ```
上述代码显示,线性回归和岭回归在本数据集上的表现最好。
无监督学习主要用于探索数据的内在结构,最常见的方法之一是聚类。我们将使用K-means算法来演示聚类过程。
首先,加载数据集并将其转换为pandas
数据框:
python
X_w = wine_df.drop(['TARGET'], axis=1)
接着,将数据集划分为训练集和测试集:
python
np.random.seed(0)
msk = np.random.rand(len(X_w)) < 0.8
train_w = X_w[msk]
test_w = X_w[~msk]
然后,进行特征缩放:
python
x = train_w.values
min_max_scaler = preprocessing.MinMaxScaler()
x_scaled = min_max_scaler.fit_transform(x)
X_scaled = pd.DataFrame(x_scaled, columns=train_w.columns)
使用Yellowbrick库来确定最佳的聚类数量:
```python from yellowbrick.cluster import KElbowVisualizer
model = KMeans() visualizer = KElbowVisualizer(model, k=(1, 8)) visualizer.fit(X_scaled) visualizer.show() ```
最后,初始化K-means算法并评估其效果:
```python from yellowbrick.cluster import SilhouetteVisualizer
model = KMeans(3, randomstate=42) visualizer = SilhouetteVisualizer(model, colors='yellowbrick') visualizer.fit(Xscaled) visualizer.show() ```
通过轮廓图可以观察到每个聚类的内部一致性和聚类间的差异。
本文介绍了机器学习的三种主要类型,并展示了如何使用scikit-learn
和Yellowbrick
库来实现这些任务。通过这些方法,我们可以更好地理解和利用数据中的内在模式。希望这些内容对你有所帮助!
感谢阅读! [留言点赞关注]
[我们一同分享AI学习与发展的干货]