2010-07-30 4 views
7

У меня очень мало данных для моего анализа, поэтому я хочу получить больше данных для анализа с помощью интерполяции.Как сделать интерполяцию

Мой набор данных содержит 23 независимых атрибута и 1 зависимый атрибут ..... как это сделать интерполяцию?

РЕДАКТИРОВАТЬ:

моя основная проблема заключается в нехватки данных, я Нч, чтобы увеличить размер моего набора данных, п атрибуты категоричны, например, атрибут А может быть низкой, высокой, meduim, так что интерполяция является правильным подходить для этого или нет ????

+0

Вы получите какой-либо осмысленный анализ из интерполированных данных? – Blorgbeard

+0

Являются ли атрибуты числовыми? И насколько хороша ваша математика? Кроме того: вы можете добавлять точки данных, но эти данные являются мнимыми. Не уверен, как это помогает анализу, кроме «начать с более (фактических) данных». –

+8

Не слишком ли здесь место? Если ваша проблема слишком мала размера выборки, интерполяция кажется неправильным подходом, поскольку она не сделает ваш слишком маленький образец более достоверным. Это похоже на увеличение качества DVD до HD, вы не получите более точной картины, а просто дублируете/выводили пиксели/точки данных. –

ответ

0

Грубо говоря, интерполировать массив:

double[] data = LoadData(); 
double requestedIndex = /* set to the index you want - e.g. 1.25 to interpolate between values at data[1] and data[2] */; 

int previousIndex = (int)requestedIndex; // in example, would be 1 
int nextIndex = previousIndex + 1; // in example, would be 2 

double factor = requestedIndex - (double)previousIndex; // in example, would be 0.25 

// in example, this would give 75% of data[1] plus 25% of data[2] 
double result = (data[previousIndex] * (1.0 - factor)) + (data[nextIndex] * factor); 

Это действительно псевдо-код; он не выполняет проверку диапазона, предполагает, что ваши данные находятся в объекте или массиве с индексом и т. д.

Надеюсь, что поможет вам начать работу - любые вопросы, пожалуйста, напишите комментарий.

0

Если в гиперсетевой сетке (с регулярным интервалом) выбраны 23 независимых переменных, то вы можете выбрать разбиение на гиперкубы и сделать линейную интерполяцию зависимого значения от вершины, ближайшей к началу координат вдоль векторов, определенных от этой вершины вдоль ребер гиперкуба от начала координат. В общем случае для данного разбиения вы проецируете точку интерполяции на каждый вектор, что дает вам новую «координату» в этом конкретном пространстве, которая затем может быть использована для вычисления нового значения путем умножения каждой координаты на разницу зависимого переменную, суммируя результаты и добавляя к зависимому значению в локальном происхождении. Для гиперкубов эта проекция проста (вы просто вычитаете ближайшую вершинную позицию, ближайшую к началу координат.)

Если ваши образцы неравномерно распределены друг от друга, то проблема намного сложнее, так как вам нужно будет выбрать соответствующее разбиение на разделы, если вы хотите выполнить линейную интерполяцию. В принципе, Delaunay triangulation обобщает на N измерений, но это непросто сделать, и полученные геометрические объекты намного сложнее понять и интерполировать, чем простой гиперкуб.

Одна вещь, которую вы могли бы подумать, - это то, что ваш набор данных естественно поддается проекции, чтобы можно было уменьшить количество измерений. Например, если доминируют две ваши независимые переменные, вы можете свернуть проблему до двух измерений, что намного проще решить. Еще одна вещь, которую вы можете рассмотреть, - это взятие точек выборки и их размещение в матрице. Вы можете выполнить разложение SVD и посмотреть на особые значения. Если имеется несколько доминирующих сингулярных значений, вы можете использовать это для выполнения проекции на гиперплоскость, определяемую этими базисными векторами, и уменьшать размеры вашей интерполяции. В принципе, если ваши данные распространяются в определенном наборе измерений, вы можете использовать эти доминирующие измерения для выполнения вашей интерполяции, так как в действительности вы не имеете много информации в других измерениях.

Я согласен с другими комментаторами, однако, что ваше помещение может быть выключено. Обычно вы не хотите, чтобы интерполяция выполняла анализ, поскольку вы просто выбираете интерполировать свои данные по-разному, и выбор интерполяции искажает анализ. Это имеет смысл только в том случае, если у вас есть веские основания полагать, что определенная интерполяция физически согласована, и вам просто нужны дополнительные точки для определенного алгоритма.

1

Это математическая проблема, но в правильном ответе слишком мало информации. В зависимости от распределения ваших реальных данных вы можете попытаться найти функцию, за которой он следует. Вы также можете попытаться интерполировать данные с помощью искусственной нейронной сети, но это будет сложно.Дело в том, что для поиска интерполяций вам необходимо проанализировать данные, которые у вас уже есть, и это побеждает цель. Вероятно, это связано с этой проблемой, но не объяснено. Какова природа данных? Можете ли вы поместить его в n-мерное пространство? Что вы ожидаете получить от анализа?

0

Могу ли я предложить кубического сплайна Интерполяция http://www.coastrd.com/basic-cubic-spline-interpolation

, если у вас есть очень конкретные потребности, это легко осуществить и вычисляет шлицы хорошо.

0

Посмотрите на методы регрессии, представленные в Elements of statistical learning; большинство из них могут быть протестированы в R. Существует множество моделей, которые можно использовать: линейная регрессия, локальные модели и т. Д.

Смежные вопросы