9 つのトップフロー回帰アルゴリズムの概要と例

WBOY
リリース: 2023-04-08 17:51:10
転載
2764 人が閲覧しました

9 つのトップフロー回帰アルゴリズムの概要と例

線形回帰は、多くの場合、機械学習とデータ サイエンスのために人々が最初に学ぶアルゴリズムです。シンプルでわかりやすいですが、機能が限られているため、実際のビジネスでは最適な選択ではありません。ほとんどの場合、線形回帰は、研究における新しい手法を評価および比較するためのベースライン モデルとして使用されます。

実際的な問題に対処するときは、他の多くの回帰アルゴリズムを理解し、試してみるべきです。この記事では、Scikit-learn と XGBoost を使用した実践演習を通じて、9 つの一般的な回帰アルゴリズムを学習します。この記事の構成は次のとおりです。

9 つのトップフロー回帰アルゴリズムの概要と例

前に書いてあります

このデータは、サードパーティの vega_datasets に隠されているよく知られたデータ サイエンスの開示を使用しています。 Python データセットのモジュール。

vega_datasets には、統計データ、地理データ、データ量の異なるバージョンなど、非常に多くのデータ セットが含まれています。たとえば、フライト データ セットには、2k、5k、200k、3m などの複数のバージョンが含まれています、など。

呼び出しは df = data('iris') または df = data.iris() と書きます。データは Anaconda3/Lib/site-packages/vega_datasets ディレクトリに存在し、ローカルの local_datasets に保存されます。 .json という記述があります。ローカルストレージにはcsv形式とjson形式が含まれます。

データ セットのインポートと使用

df = data.cars()
df.head()
ログイン後にコピー

9 つのトップフロー回帰アルゴリズムの概要と例

df.info()
ログイン後にコピー
class 'pandas.core.frame.DataFrame'>
RangeIndex: 406 entries, 0 to 405
Data columns (total 9 columns):
# ColumnNon-Null CountDtype
----------------------------
0 Name406 non-nullobject
1 Miles_per_Gallon398 non-nullfloat64
2 Cylinders 406 non-nullint64
3 Displacement406 non-nullfloat64
4 Horsepower400 non-nullfloat64
5 Weight_in_lbs 406 non-nullint64
6 Acceleration406 non-nullfloat64
7 Year406 non-nulldatetime64[ns]
8 Origin406 non-nullobject
dtypes: datetime64[ns](1 "ns"), float64(4), int64(2), object(2)
memory usage: 28.7+ KB
ログイン後にコピー

データ処理

# 过滤特定列中的NaN行
df.dropna(subset=['Horsepower', 'Miles_per_Gallon'], inplace=True)
df.sort_values(by='Horsepower', inplace=True)
# 数据转换
X = df['Horsepower'].to_numpy().reshape(-1, 1)
y = df['Miles_per_Gallon'].to_numpy().reshape(-1, 1)
plt.scatter(X, y, color='teal', edgecolors='black', label='Horsepower vs. Miles_per_Gallon')
plt.legend()
plt.show()
ログイン後にコピー

9 つのトップフロー回帰アルゴリズムの概要と例

1. 線形回帰

線形回帰は、多くの場合、機械学習とデータ サイエンスで最初に学習されるアルゴリズムです。線形回帰は、入力変数 (X) と単一の出力変数 (y) の間に線形関係があると仮定する線形モデルです。一般に、次の 2 つの状況があります。

  • 単変量線形回帰: 単一の入力変数と単一の出力変数モデルの間の関係を表します。
  • 多変数線形回帰 (多重線形回帰とも呼ばれます): 複数の入力変数と 1 つの出力変数の間の関係をモデル化します。

このアルゴリズムは非常に一般的で、Scikit-learn[2] には単純な線形回帰 LinearRegression() アルゴリズムが組み込まれています。次に、子猿の LinearRegression オブジェクトを作成し、トレーニング データをトレーニングに使用します。

from sklearn.linear_model import LinearRegression # 创建和训练模型
linear_regressor = LinearRegression()
linear_regressor.fit(X, y)
ログイン後にコピー

トレーニングが完了したら、LinearRegression の coef_ 属性を使用してモデルの係数パラメーターを表示できます。

linear_regressor.coef_
ログイン後にコピー
array([[-0.15784473]])
ログイン後にコピー

次に、トレーニングされたモデルを使用して、トレーニング データに線を当てはめます。

# 为训练数据绘制点和拟合线
plt.scatter(X, y, color='RoyalBlue', edgecolors='black', label='Horsepower vs. Miles_per_Gallon')
plt.plot(X, linear_regressor.predict(X), color='orange', label='Linear regressor')
plt.title('Linear Regression')
plt.legend()
plt.show()
ログイン後にコピー

9 つのトップフロー回帰アルゴリズムの概要と例

概要

線形回帰に関するいくつかの重要なポイント:

  • モデル化が迅速かつ簡単
  • 線形回帰は、モデル化される関係がそれほど複雑ではなく、データ量がそれほど多くない場合に特に役立ちます。
  • 非常に直感的な理解と説明。
  • 異常値に対して非常に敏感です。

2. 多項式回帰

多項式回帰は、非線形分離可能データのモデルを作成する場合に最も一般的な選択肢の 1 つです。これは線形回帰に似ていますが、変数 X と y の間の関係を使用して、データ ポイントの適合曲線を描く最適な方法を見つけます。

多項式回帰の場合、一部の独立変数の累乗は 1 より大きくなります。たとえば、次の 2 次モデルを提案できます。

  • β_0、β_1、および β_2 は係数です。
  • x は変数/特徴です。
  • ε は残差です。

Scikit-learn には多項式回帰 PolynomialFeature が組み込まれています。まず、指定した次数を持つすべての多項式特徴からなる特徴行列を生成する必要があります。

from sklearn.preprocessing import PolynomialFeatures
# 为二次模型生成矩阵
# 这里只是简单地生成X^0 X^1和X^2的矩阵
poly_reg = PolynomialFeatures(degree = 2 )
X_poly = poly_reg.fit_transform(X)
ログイン後にコピー

次に、LinearRegression オブジェクトを作成し、生成したばかりの X_poly 特徴行列にそれを当てはめましょう。

# 多项式回归模型
poly_reg_model = LinearRegression()
poly_reg_model.fit(X_poly, y)
ログイン後にコピー

次に、モデルを取得し、トレーニング データに線を当てはめます。X_plot は次のようになります。

# 为训练数据绘制点和拟合线
plt.scatter(X, y, color='DarkTurquoise', edgecolors='black',
label='Horsepower vs. Miles_per_Gallon')
plt.plot(X, poly_reg_model.predict(X_poly), color='orange',
label='Polynmial regressor')
plt.title('Polynomial Regression')
plt.legend()
plt.show()
ログイン後にコピー

9 つのトップフロー回帰アルゴリズムの概要と例

概要

About多項式 いくつかの主要な戻り点:

  • 能够对非线性可分数据进行建模;而线性回归不能做到这一点。它总体上更加灵活,可以对一些相当复杂的关系进行建模。
  • 完全控制特征变量的建模(可指定设置指数)。
  •  需要精心设计,需要一些数据知识才能选择最佳指数。
  • 如果指数选择不当,则容易过度拟合。

3. 支持向量回归

众所周知的支持向量机在处理分类问题时非常有效。其实,SVM 也经常用在回归问题中,被称为支持向量回归(SVR)。同样,Scikit-learn内置了这种方法SVR()。

在拟合 SVR 模型之前,通常较好的做法是对数据进行数据标准化操作,及对特征进行缩放。数据标准化的目的是为了确保每个特征都具有相似的重要性。我们通过StandardScaler()方法对训练数据操作。

from sklearn.svm import SVR
from sklearn.preprocessing import StandardScaler # 执行特征缩放
scaled_X = StandardScaler()
scaled_y = StandardScaler()
scaled_X = scaled_X.fit_transform(X)
scaled_y = scaled_y.fit_transform(y)
ログイン後にコピー

接下来,我们创建了一个SVR与对象的内核设置为'rbf'和伽玛设置为'auto'。之后,我们调用fit()使其适合缩放的训练数据:

svr_regressor = SVR(kernel='rbf', gamma='auto')
svr_regressor.fit(scaled_X, scaled_y.ravel())
ログイン後にコピー

现在采用该模型并为训练数据拟合一条线,scaled_X如下所示:

plt.scatter(scaled_X, scaled_y, color='DarkTurquoise',
edgecolors='black', label='Train')
plt.plot(scaled_X, svr_regressor.predict(scaled_X),
color='orange', label='SVR')
plt.title('Simple Vector Regression')
plt.legend()
plt.show()
ログイン後にコピー

9 つのトップフロー回帰アルゴリズムの概要と例

小结

支持向量回归的几个关键点

  • 它对异常值具有鲁棒性并且在高维空间中有效
  • 它具有出色的泛化能力(能够正确适应新的、以前看不见的数据)
  • 如果特征数量远大于样本数量,则容易过拟合

4. 决策树回归

决策树 (DT) 是一种用于分类和回归的非参数监督学习方法 。目标是创建一个树模型,通过学习从数据特征推断出的简单决策规则来预测目标变量的值。一棵树可以看作是分段常数近似。

决策树回归也很常见,以至于Scikit-learn内置了DecisionTreeRegressor. 甲DecisionTreeRegressor对象可以在没有特征缩放如下创建:

from sklearn.tree import DecisionTreeRegressor
# 不需要进行特性缩放,因为它将自己处理。
tree_regressor = DecisionTreeRegressor(random_state = 0)
tree_regressor.fit(X, y)
ログイン後にコピー

下面使用训练好的模型,绘制一条拟合曲线。

X_grid = np.arange(min(X), max(X), 0.01)
X_grid = X_grid.reshape(len(X_grid), 1)
plt.scatter(X, y, color='DarkTurquoise',
edgecolors='black', label='Train')
plt.plot(X_grid, tree_regressor.predict(X_grid),
color='orange', label='Tree regressor')
plt.title('Tree Regression')
plt.legend()
plt.show()
ログイン後にコピー

9 つのトップフロー回帰アルゴリズムの概要と例

小结

关于决策树的几个关键点:

  • 易于理解和解释,并且决策树可以被可视化显示。
  • 适用于离散值和连续值。
  • 使用 DT预测数据的成本是训练树的训练数据对数量的对数。
  • 决策树的预测既不平滑也不连续(显示为分段常数近似值,如上图所示)。

5. 随机森林回归

一般地,随机森林回归与决策树回归非常相似,它是一个元估计器,在数据集的各种子样本集上拟合许多决策树,并使用平均方法来提高预测准确性和控制过拟合。

随机森林回归器在回归中的性能可能比决策树好,也可能不比决策树好(虽然它通常在分类中表现更好),因为树构造算法本质上存在微妙的过度拟合-欠拟合权衡。

随机森林回归很常见,以至于Scikit-learn内置了RandomForestRegressor. 首先,我们需要创建一个RandomForestRegressor具有指定数量估计器的对象,如下所示:

from sklearn.ensemble import RandomForestRegressor
forest_regressor = RandomForestRegressor(
n_estimators = 300,
random_state = 0
)
forest_regressor.fit(X, y.ravel())
ログイン後にコピー

下面使用训练好的模型,绘制一条拟合曲线。

X_grid = np.arange(min(X), max(X), 0.01)
X_grid = X_grid.reshape(len(X_grid), 1)
plt.scatter(X, y, color='DarkTurquoise',
edgecolors='black', label='Train')
plt.plot(X_grid, forest_regressor.predict(X_grid),
color='orange', label='Random Forest regressor')
plt.title('Random Forest Regression')
plt.legend()
plt.show()
ログイン後にコピー

9 つのトップフロー回帰アルゴリズムの概要と例

小结

关于随机森林回归的几个关键点:

  • 需要注意减少决策树中的过拟合并提高准确性
  • 它也适用于离散值和连续值
  • 需要大量的计算能力和资源,因为它适合许多决策树来组合它们的输出

6. LASSO 回归

LASSO 回归是使用收缩的线性回归的变体。收缩是数据值向中心点收缩作为均值的过程。这种类型的回归非常适合显示重度多重共线性(特征彼此之间的重度相关性)的模型。

Scikit-learn内置了LassoCV.

from sklearn.linear_model import LassoCV
lasso = LassoCV()
lasso.fit(X, y.ravel())
ログイン後にコピー

下面使用训练好的模型,绘制一条拟合曲线。

plt.scatter(X, y, color='teal', edgecolors='black',
label='Actual observation points')
plt.plot(X, lasso.predict(X), color='orange',
label='LASSO regressor')
plt.title('LASSO Regression')
plt.legend()
plt.show()
ログイン後にコピー

9 つのトップフロー回帰アルゴリズムの概要と例

小结

关于套索回归的几点:

  • 它最常用于消除自动化变量和选择特征。
  • 它非常适合显示严重多重共线性(特征彼此高度相关)的模型。
  • LASSO 回归利用 L1 正则化
  • LASSO 回归被认为比 Ridge 更好,因为它只选择一些特征并将其他特征的系数降低到零。

7. 岭回归

岭回归与 LASSO 回归非常相似,因为这两种技术都使用收缩。Ridge 回归和 LASSO 回归都非常适合显示重度多重共线性(特征彼此之间的高度相关性)的模型。它们之间的主要区别在于 Ridge 使用 L2 正则化,这意味着没有一个系数像在 LASSO 回归中那样变为零(而是接近零)。

Scikit-learn内置了RidgeCV.

from sklearn.linear_model import RidgeCV
ridge = RidgeCV()
ridge.fit(X, y)
ログイン後にコピー

下面使用训练好的模型,绘制一条拟合曲线。

plt.scatter(X, y, color='teal', edgecolors='black',
label='Train')
plt.plot(X, ridge.predict(X), color='orange',
label='Ridge regressor')
plt.title('Ridge Regression')
plt.legend()
plt.show()
ログイン後にコピー

9 つのトップフロー回帰アルゴリズムの概要と例

小结

关于岭回归的几个关键点:

  • 它非常适合显示严重多重共线性(特征彼此高度相关)的模型。
  • 岭回归使用 L2 正则化,贡献较小的特征将具有接近零的系数。
  • 由于 L2 正则化的性质,岭回归被认为比 LASSO 差。

8. ElasticNet 回归

ElasticNet 是另一个使用 L1 和 L2 正则化训练的线性回归模型。它是 LASSO 和岭回归技术的混合体,因此它也非常适合显示严重多重共线性(特征彼此高度相关)的模型。

Lasso 和 Ridge 之间权衡的一个实际优势是它允许 Elastic-Net 在旋转时继承一些 Ridge 的稳定性。

Scikit-learn内置了ElasticNetCV模型.

from sklearn.linear_model import ElasticNetCV
elasticNet = ElasticNetCV()
elasticNet.fit(X, y.ravel())
ログイン後にコピー

下面使用训练好的模型,绘制一条拟合曲线。

plt.scatter(X, y, color='DarkTurquoise', edgecolors='black', label='Train')
plt.plot(X, elasticNet.predict(X), color='orange',label='ElasticNet regressor')
plt.title('ElasticNet Regression')
plt.legend()
plt.show()
ログイン後にコピー

9 つのトップフロー回帰アルゴリズムの概要と例

小结

ElasticNet 回归的几个关键点:

  • ElasticNet 总是优于 LASSO 和 Ridge,因为它解决了两种算法的缺点
  • ElasticNet 带来了额外的开销,用于确定最佳解决方案的两个 lambda 值。

9. XGBoost 回归

极限梯度提升( XGBoost ) 是梯度提升算法的高效实现。梯度提升是指一类可用于分类或回归问题的集成机器学习算法。

XGBoost是由最初开发的开放源码库tianqi-chen[3]在他的题为“2016论文XGBoost:可扩展树增压系统[4]”。该算法被设计为具有计算效率和高效性。

第一步是安装 XGBoost 库(如果尚未安装)。

pip install xgboost
ログイン後にコピー

可以通过创建以下实例来定义 XGBoost 模型XGBRegressor:

from xgboost import XGBRegressor
# create an xgboost regression model
model = XGBRegressor(
n_estimators=1000,
max_depth=7,
eta=0.1,
subsample=0.7,
colsample_bytree=0.8,
)
ログイン後にコピー
  • n_estimators:整体中的树木数量,通常会增加,直到看不到进一步的改进。
  • max_depth:每棵树的最大深度,通常值在 1 到 10 之间。
  • eta:用于对每个模型进行加权的学习率,通常设置为较小的值,例如 0.3、0.1、0.01 或更小。
  • subsample:每棵树使用的样本数,设置为0到1之间的值,通常为1.0以使用所有样本。
  • colsample_bytree:每棵树中使用的特征(列)数,设置为 0 到 1 之间的值,通常为 1.0 以使用所有特征。

下面使用训练好的模型,绘制一条拟合曲线。

plt.scatter(X, y, color='DarkTurquoise', edgecolors='black', label='Train')
plt.plot(X, model.predict(X), color='orange',label='XGBoost regressor')
plt.title('XGBoost Regression')
plt.legend()
plt.show()
ログイン後にコピー

9 つのトップフロー回帰アルゴリズムの概要と例

小结

关于 XGBoost 的几个关键点:

  • XGBoost 在稀疏和非结构化数据上表现不佳。
  • 该算法旨在计算高效且高效,但对于大型数据集而言,训练时间仍然相当长
  • 对异常值很敏感

写在最后

到这里本文就结束啦,本文我们通过使用Scikit-learn和 XGBoost 的动手实践介绍了 九种流行的回归算法。在解决实际问题时,可以尝试不同的算法并找到解决实际问题的最佳回归模型。

以上が9 つのトップフロー回帰アルゴリズムの概要と例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:51cto.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!