2017-11-17 5 views
-1

私は機械学習とスケルトンでは新しいです。 私は以下の質問をしています:sklearn - Python3で私自身のデータセットを使うにはどうすればいいですか

私は線形回帰をしようとしていますが、私は自分のデータを.txtファイルから使いたいと思います。 私は、3列のテーブルを持つデータをいくつか持っています。

その後、私はこの次のコードを変更する方法を知っていただきたいと思い、それは、http://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html

その後

私は例のコードの前にビットを変更し、私はいくつかのデータを発明の例で正しいということですそれを行う方法?このように、XYのように使用します。そして、私はまた方程式:x_train = x [:2][:2]が私の手順にいくつかの影響を与える方法を知っているだろう。私は本当にこの部分を得ていませんでした。

from sklearn import linear_model 
import matplotlib.pyplot as plt 
from sklearn.metrics import mean_squared_error, r2_score 

#X has to be numpy array not list. 

x=([0],[1],[2],[3],[4],[5],[6],[7],[8],[9],[10]) 
y=[5,3,8,3,4,5,5,7,8,9,10] 

x_train = x [:2] 
x_test = x [2:] 

y_train = y[:2] 
y_test = y[2:] 

regr = linear_model.LinearRegression() 
regr.fit (x_train,y_train) 

y_pred = regr.predict(x_test) 

#coefficient 
print('Coefficients: \n', regr.coef_) 

#the mean square error 
print("Mean squared error: %.2f" % mean_squared_error(y_test, y_pred)) 
print('Variance score: %.2f' % r2_score(y_test, y_pred)) 

plt.scatter(x_test, y_test, color='black') 
plt.plot(x_test, y_pred, color='blue', linewidth=3) 
plt.axis([0, 20, 0, 20]) 
plt.show() 

ありがとうございます!

EDIT 1

私は、このWebページで受け付け助けを借りて、そう、私は自分自身のデータのフィットを生産するために、いくつかのコードを作ってみましたが、私は正しいフィット感を得ることができないんだけど誰かが私をもう少し助けてくれる時間があるか、私が何か間違っているかどうか教えてください。

私は写真を使っているコードは、私はここに私のデータと私は訓練し、TEST First part of the code

から取得するように見えるものの絵を入れている

import pandas as pd 
import numpy as np 
from sklearn.model_selection import KFold 
from sklearn.model_selection import cross_val_score 
from sklearn import linear_model 
from sklearn.metrics import mean_squared_error, r2_score 
import matplotlib.pyplot as plt 

data = pd.read_csv('data.txt') 
#x = data[['col1','col2']] 
x = data[['col1']] 
y = data['col3'] 

#convert to array to fit the model 
x=np.asarray(x) 
y=np.asarray(y) 

# define the KFolds 
kf = KFold(n_splits=2) 

#define the model 
regr = linear_model.LinearRegression() 

# use cross validation and return the r2 score for each Fold 
#if you want to return other scores than r2, just change the scoring in cross_val_score 
scores = cross_val_score(regr, x, y, cv= kf, scoring= 'r2') 

print(scores) 

for train_index, test_index in kf.split(x): 
    print("TRAIN:", train_index, "TEST:", test_index) 
    X_train, X_test = x[train_index], x[test_index] 
    y_train, y_test = y[train_index], y[test_index] 


plt.scatter (X_test, y_test) 
plt.show() 

取得していますそれから、私はいくつかの適切な手順をしましたが、それが正しいかどうかは分かりません。

regr.fit (X_train, y_train) 
y_pred = regr.predict(X_test) 
print(y_pred) 
plt.scatter(X_test, y_test, color='black') 
plt.plot(X_test, y_pred, color='blue', linewidth=3) 
plt.show() 

そして、私は全く違和感があります。 Fit of my function

MINUITを使用したときに私のフィット感がうまくいけば、なぜそれが得られるのか分かりません。だから、誰かが私を助けるためのヒントを持っている場合。

明らかに、プログラムが "y"のデータをTRAINまたはTESTサンプルに使用していないのはなぜですか?

私のデータはここtakedすることができます。私にとってhttps://www.dropbox.com/sh/nbbsc0fqznkwxvt/AAD-u6lM4orJOGrgIyz0o8B9a?dl=0

だけ重要なのは、COL2が無視されるべきで、col1とcol3というです。それから、私はこのデータに適合させ、自分のフィット感を引き出したいと思います。私はそれがこのデータに合った線であることを知っています。

ありがとうございました!

+0

これは広すぎるとだけ自分の試みなしでの他のコードを示す使用されるべきです。必要なデータシェイプを理解するためにドキュメントを読んでください。これを確認するには '' diabetes_X.shape'''とcoを出力してください。 numpyまたはpandas docsを読んで、numpy配列/データフレームにデータを読み込む方法について学んでください。 (それは与えられていないあなたのtxtファイルに依存し、そのファイルについてのあなたの説明は非公式です) – sascha

+0

@サスカ私はそれをインターネット上で探しています。私は線形回帰で自分のデータを使用する方法を理解するための説明を見つけることができませんでした。すべての例では、自分の人ではないデータセットを使用しています。私はここに私のデータセットを提供することはできません。それは公開情報ではありません。私はちょうどいくつかの測定について3列のtxtファイルを持っています。私自身のデータセットをアップロードする方法についていくつかの説明があります。あなたの答えは全く役に立たない。しかし、とにかくありがとう! – Gabriela

+0

**必要なものはすべてドキュメントに記載されています!必要な形状のためのsklearnの。次に、正しい形状の配列を作成するだけです。あなたはどうやってそれをするのかは関係ありません。 numpyとpandasの両方が読者を提供します。有益な情報を提供していないと、この質問が閉じられるのを待つ準備ができています。 (テキストベースの3列のデータセットには無数の異なるエンコーディングがあります!) – sascha

答えて

1

まず、データを分割してデータの一部を使用してモデルをトレーニングし、別の部分を評価する主な理由は、過度の適合を避けることです。通常、クロスバリデーションを実行するには、KFoldsまたはLOO(1つはそのまま残す)を使用します。

ここでは、30個のサンプル、3つの変数、およびKFoldとの相互検証を使用した例を示します。

import numpy as np 
from sklearn.model_selection import KFold 
from sklearn.model_selection import cross_val_score 
from sklearn import linear_model 

#create artificial data with 30 lines (samples) and 3 columns (variables) 
x = np.random.rand(30,3) 

#create the target variable y 
y = range(30) 

# convert the list to numpy array (this is needed for fit method of sklearn) 
y = np.asarray(y) 

# define the KFolds (3 folds in this example) 
kf = KFold(n_splits=3) 

#define the model 
regr = linear_model.LinearRegression() 

# use cross validation and return the r2 score for each Fold (here we have 3). 
#if you want to return other scores than r2, just change the scoring in cross_val_score. 
scores = cross_val_score(regr, x, y, cv= kf, scoring= 'r2') 

print(scores) 

結果:

ここでは、各折り目のモデルのR2のスコアを見ることができます。私たちはデータを3回分割し、これらの値を得るために3つの異なるトレーニングデータを使用しました。これは、cross_val_scoreメソッド内でsklearnによって自動的に行われます。

array([-30.36184326, -0.4149778 , -28.89110233]) 

KFoldは、使用してトレーニングとテストのインデックスを印刷することができないかを理解するには、次の

for train_index, test_index in kf.split(x): 
    print("TRAIN:", train_index, "TEST:", test_index) 
    X_train, X_test = x[train_index], x[test_index] 
    y_train, y_test = y[train_index], y[test_index] 

結果

('TRAIN:', array([10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 
    27, 28, 29]), 'TEST:', array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])) 
('TRAIN:', array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 20, 21, 22, 23, 24, 25, 26, 
    27, 28, 29]), 'TEST:', array([10, 11, 12, 13, 14, 15, 16, 17, 18, 19])) 
('TRAIN:', array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 
    17, 18, 19]), 'TEST:', array([20, 21, 22, 23, 24, 25, 26, 27, 28, 29])) 

を、あなたがそれを見ることができます1回目にサンプルを使用した:10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29.

:10

次に、第二倍ため、我々は、サンプルを用い、これらの数値は、Xデータの指標です。例えば。 2は3番目のサンプル(ライン)を意味します。 Pythonでは、0から数えます。 ご覧のとおり、各Foldで正確に同じデータ(サンプル)を使用していません。

これが役に立ちます。 TXTデータをロードに関するご質問にお答えするために

EDIT 1

。 3つの列を持つtxtファイルがあるとしましょう。最初の2列はフィーチャで、最後の列はy(ターゲット)です。この場合

は、次のような使用してパンダを行うことができます。

import pandas as pd 
import numpy as np 

data = pd.read_csv('data.txt') 
x = data[['col1','col2']] 
y = data['col3'] 

#convert to array to fit the model 
x=np.asarray(x) 
y=np.asarray(y) 

TXTはここにある:https://ufile.io/eb5xl(遅いダウンロードを選択してください)。

EDIT 2

これが唯一の可視化を目的とのためです。私はデータを分割しません。私はすべてのデータをモデルに合わせて使用​​し、同じデータを予測します。次に、予測値をプロットします。

import pandas as pd 
import numpy as np 
from sklearn.model_selection import KFold 
from sklearn.model_selection import cross_val_predict 
from sklearn import linear_model 
import matplotlib.pyplot as plt 

data = pd.read_csv('data.txt') 

x = data[['col1']] 
y = data['col3'] 

#convert to array to fit the model 
x=np.asarray(x) 
y=np.asarray(y) 

regr = linear_model.LinearRegression() 
regr.fit(x, y) 

y_predicted = regr.predict(x) 

plt.scatter(x, y, color='black') 
plt.plot(x, y_predicted, color='blue', linewidth=3) 

plt.xticks(()) 
plt.yticks(()) 

plt.show() 

結果

データが線形パターンに従ういけないようです。他のモデル(例えば指数フィッティング

Linear regression

+0

おかげさまで、ご回答いただきありがとうございます。これは多くの助けとなりました。しかし、まだ私はいくつかの質問があります。申し訳ありませんが、彼らは基本的には、私は自分のこのトピックで勉強している場合。とにかく私の質問は:あなたのコードと私が投稿したものの違いは、あなたのコードではコンピュータが単独でトレーニングとテストの分離をしているようだということでしたか?私のコードでは、私たちはそれをやりたい間隔を書くべきです。あなたの例ではKFOLDは正しいですか?また、私はxに、例えば30行3列の行列をデータで書くことができるかどうかを知りたいですか? – Gabriela

+0

そして最終的な質問は、方法で可能なのですか?線形回帰は、フィットを行うために私の変数に持っている誤差を定義しますか?私自身のエラーがあるので、これをコードに伝えれば、より正確にフィットすることができますか?私は私の質問がはっきりしていることを願うそうでなければ私は書き直すことができます。どうもありがとう! – Gabriela

+0

@Gabriela最初の質問:はい主な違いは私のコードで私はデータを分割するKFoldを使用しているということです。 2番目の質問:はいそれは非常に簡単です。あなたはどのようなデータを持っているのか教えてください。 CSVファイルまたはExcelまたはTXT?最後の質問のために:モデルはエラーを計算します、私はあなたが持っているものと同じであるべきだと思います。エラーを使用してモデルにフィードしたい場合は、自分で線形回帰関数をハードコードする必要があります。 – sera

0

としては指摘:誰か他の人のコードを表示

  • は、スタックオーバーフローの良い習慣ではありません。質問の仕方についてはthisをお読みください。
  • データの例(実際のデータを公開できない場合はダミーデータ)を提供する必要があります。とにかく

、それは、このような構造を持つテキストファイルで、CSVであなたのテキストファイルを回す:、その後

col1name;col2name;col3name 
1;0;2 
4;6;8 
0;1;3 

pandas.DataFrameであなたのデータセットを入れて、すべての列を使用しますが、として最後の1お使いのXデータセット、およびあなたのY.として最後の1

import pandas as pd 
from sklearn.model_selection import train_test_split 
from sklearn.linear_model import LinearRegression 

file_path = "path/to/your/file.csv" 

data = pd.read_csv(filepath_or_buffer = file_path, sep = ";") 

X_train, X_test, y_train, y_test = train_test_split(data.loc[:, data.columns != "name_of_your_last_column"], data.loc[:, data.columns == "name_of_your_last_column"], test_size = 0.25) 

classifier = LinearRegression() 
classifier.fit(X_train, y_train) 

print("Train set score :", classifier.score(X_train, y_train) 
print("Test set score :", classifier.score(X_test, y_test)) 

、あなたは、オーバーフィッティングを避けるために、相互検証手順を使用する必要があり、これは最低限の例であることに注意してくださいと国連を回避するために、グリッドの検索手順derfitting。

+0

あなたの情報をありがとう!私は確かに質問する方法を読むでしょう。私は試していたことに基づいて少し質問を変えました。私のやり方が間違っているかどうかも知りたいですか?私は昨日Python3とsklearnで始めました。だから、私はあなたの例を実装するために、ちょっとだけ理解する時間が必要だと思います。どうもありがとうございました!あなたの答えに感謝します。 – Gabriela

+1

@Gabrielaあなたの説明のために、 – desertnaut