まず、このフォーラムにはこれと非常によく似た質問がありますが、一致するものがないことを信じてください。重複しないでください。
Scikitのsklearnを使用した線形回帰の2つのメソッドに遭遇しましたが、2つの違いを理解できていません。特に、最初のコードでtrain_test_split()メソッドが呼び出され、もう1つのコードでは直接フィットメソッドが呼び出されています。
私は複数のリソースで勉強していますが、この1つの問題は私にとって非常に混乱しています。
最初にSVRを使用します
X = np.array(df.drop(['label'], 1))
X = preprocessing.scale(X)
y = np.array(df['label'])
X_train, X_test, y_train, y_test = cross_validation.train_test_split(X, y, test_size=0.2)
clf = svm.SVR(kernel='linear')
clf.fit(X_train, y_train)
confidence = clf.score(X_test, y_test)
そして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)
# Make predictions using the testing set
diabetes_y_pred = regr.predict(diabetes_X_test)
したがって、私の主な焦点は、svr(kernel = "linear")の使用とLinearRegression()の使用の違いです。
これは私が見つけたものです:
直感的には、すべてのリグレッサーとして、コスト関数を最小化することによってデータに線を適合させようとします。ただし、SVRの興味深い部分は、非線形カーネルをデプロイできることです。この場合、非線形の作成を終了します回帰、つまり線ではなく曲線のあてはめこのプロセスは、カーネルトリックと、プライマリではなくデュアルでのソリューション/モデルの表現に基づいています。つまり、モデルは、トレーニングポイントの組み合わせとして表されます。特徴といくつかの重みの関数よりも。同時に、基本的なアルゴリズムは同じままです。非線形になるプロセスの唯一の実際の変更は、単純な内部積からいくつかの非線形関数に変わるカーネル関数です。 。
したがって、SVRは非線形フィッティングの問題も許容しますが、LinearRegression()は直線を使用した単純な線形回帰専用です(どちらの場合も任意の数の特徴を含めることができます)。
cross_validation.train_test_split:配列または行列をランダムなトレインとテストのサブセットに分割します。
2番目のコードでは、分割はランダムではありません。
svm.SVR:サポートベクター回帰(SVR)は、分類にSVMと同じ原理を使用しますが、わずかな違いがあります。まず第一に、出力は実数であるため、手元の情報を予測することは非常に困難になり、無限の可能性があります。回帰の場合、許容範囲(イプシロン)は、問題からすでに要求されているSVMに近似して設定されます。しかし、この事実に加えて、より複雑な理由もあります。アルゴリズムはより複雑であるため、考慮する必要があります。ただし、主な考え方は常に同じです。エラーを最小限に抑えるために、マージンを最大化する超平面を個別化し、エラーの一部が許容されることを念頭に置いてください。
線形回帰:統計では、線形回帰は、スカラー従属変数yと1つ以上の説明変数(または独立変数)の間の関係をモデル化するための線形アプローチです。 )Xで表されます。1つの説明変数の場合は、単純線形回帰と呼ばれます。