C言語で線形回帰を計算するプログラムの作成方法
はじめに
本記事では、C言語を用いて線形回帰を計算するプログラムの実装方法を解説します。線形回帰は統計解析や機械学習の基礎となる重要な手法であり、最小二乗法を使ってデータに最もよく当てはまる直線を求めます。
問題
線形回帰アルゴリズムを実装したプログラムを作成してください。
ユーザーには、入力するデータ(座標点)の総数 n を入力してもらいます。
線形回帰とは
線形回帰は、観測されたデータに対して直線方程式 y = mx + c を当てはめることで、2つの変数間の関係を明らかにする手法です。ここで、一方の変数 x は説明変数(独立変数)、もう一方の変数 y は目的変数(従属変数)と呼ばれます。
求めるべきパラメータは次の2つです。
- m(傾き): 直線の傾斜を表す係数
- c(切片): x = 0 のときの y の値
計算式
最小二乗法に基づく各パラメータの計算式は以下の通りです。
- d = n・Σx² − (Σx)²
- m = (n・Σxy − Σx・Σy) / d
- c = (Σy・Σx² − Σx・Σxy) / d
アルゴリズムのロジック
まず、すべてのデータ点から必要な合計値(Σx、Σx²、Σy、Σxy)を求めます。
for(i=0;i<n;i++){
printf("enter values of x and y");
scanf("%f%f",&x,&y);
sumx=sumx+x;
sumxsq=sumxsq+(x*x);
sumy=sumy+y;
sumxy=sumxy+(x*y);
}
d=n*sumxsq-sumx*sumx;
m=(n*sumxy-sumx*sumy)/d;
c=(sumy*sumxsq-sumx*sumxy)/d;最後に、求めた傾き m と切片 c を出力します。
C言語によるサンプルコード
以下は、線形回帰を計算する完全なCプログラムです。
#include<math.h>
#include<stdio.h>
main(){
int n,i;
float x,y,m,c,d;
float sumx=0,sumxsq=0,sumy=0,sumxy=0;
printf("enter the number of values for n:");
scanf("%d",&n);
for(i=0;i<n;i++){
printf("enter values of x and y");
scanf("%f%f",&x,&y);
sumx=sumx+x;
sumxsq=sumxsq+(x*x);
sumy=sumy+y;
sumxy=sumxy+(x*y);
}
d=n*sumxsq-sumx*sumx;
m=(n*sumxy-sumx*sumy)/d;
c=(sumy*sumxsq-sumx*sumxy)/d;
printf("M=%f\tC=%f\n",m,c);
}コードのポイント
- ループ内で各データ点を読み込みながら、4種類の合計値を累積していきます。
- 分母 d が 0 にならないよう注意が必要です(d = 0 の場合は回帰直線を一意に定められません)。
- 結果として得られる m と c から、回帰直線 y = mx + c が確定します。
実行結果
上記のプログラムを実行すると、以下のような出力が得られます。
enter the number of values for n:5 enter values of x and y1 5 enter values of x and y2 6 enter values of x and y2 4 enter values of x and y3 7 enter values of x and y1 1 M=2.000000 C=1.000000
この例では、5組のデータ点から傾き M = 2.0、切片 C = 1.0 が求まり、回帰直線は y = 2x + 1 であることがわかります。
まとめ
本記事では、C言語で最小二乗法による線形回帰を実装する方法を紹介しました。合計値の累積と公式への代入というシンプルな手順で回帰直線が求められるため、数値計算の入門としても最適です。ぜひ実際にコードを動かして、さまざまなデータセットで試してみてください。
-
Pythonで学ぶ線形探索(リニアサーチ)の基本と実装方法
この記事では、最も基本的な検索アルゴリズムの一つである「線形探索(Linear Search)」の仕組みを理解し、Python 3.xでの実装方法をわかりやすく解説します。 線形探索のアルゴリズム 配列 arr[] の左端の要素から順に、目的の要素 x と各要素を一つずつ比較していきます x がいずれかの要素と一致した場合、そのインデックス(位置)を返します x が配列内のどの要素とも一致しなかった場合、-1 を返すか「要素が見つからない」ことを示します それでは、このアプローチの流れを視覚的に確認してみましょう。 実装例 def linearsearch(arr, x):
-
PyTorchを使った線形回帰の実装方法を徹底解説
線形回帰とは 単純線形回帰の基礎 2つの連続変数の間にある関係性を把握するために用いられる手法です。 具体例: x = 独立変数(例:体重) y = 従属変数(例:身長) 関係式は y = αx + β という形式で表されます。 それでは、実際にプログラムを通して単純線形回帰の仕組みを見ていきましょう。 #単純線形回帰 import numpy as np import matplotlib.pyplot as plt np.random.seed(1) n = 70 x = np.random.randn(n) y = x * np.random.randn(n) colo